在 Debian 上运行 Golang 程序时,“日志格式怎么改”通常有两种场景:改 Go 程序自身的日志格式,或改 systemd / 系统日志的格式。下面分别说明。
Go 标准库是 log 包,默认格式比较简单。
logpackage main
import (
"log"
"os"
)
func main() {
log.SetOutput(os.Stdout)
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
log.Println("hello")
}
常用 flag:
log.Ldate:日期log.Ltime:时间log.Lmicroseconds:微秒log.Llongfile:完整文件名log.Lshortfile:文件名+行号输出示例:
2026/01/21 10:00:00 main.go:12: hello
标准库格式不灵活,建议用 logrus 或 zap。
import "github.com/sirupsen/logrus"
func main() {
logrus.SetFormatter(&logrus.JSONFormatter{})
logrus.WithFields(logrus.Fields{
"app": "demo",
}).Info("hello")
}
import "go.uber.org/zap"
func main() {
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("hello",
zap.String("app", "demo"),
)
}
如果你是用 systemd 启动 Go 程序(.service 文件),日志会进入 journald。
journalctl -u your-service.service
journalctl -u your-service.service --output=json
journalctl -u your-service.service --output=short-iso
可选格式:
shortshort-isoshort-preciseverbosejson编辑:
sudo nano /etc/systemd/journald.conf
常见项:
Storage=persistent
MaxRetentionSec=2week
改完重启:
sudo systemctl restart systemd-journald
Debian 传统日志在 /var/log/,由 rsyslog 管理。
sudo nano /etc/rsyslog.conf
示例模板:
template(name="MyFormat" type="string"
string="%timegenerated% %hostname% %app-name%: %msg%\n")
| 场景 | 改哪里 |
|---|---|
| Go 程序日志格式 | log / logrus / zap |
| systemd 日志显示格式 | journalctl --output |
| 系统日志格式 | rsyslog.conf |
如果你能说明:
我可以直接给你一份可复制的配置。