在 Debian 上管理 Golang 项目日志
一 日志库选择与输出策略
二 作为 systemd 服务运行并接入 journald
[Unit]
Description=My Golang Application
After=network.target
[Service]
ExecStart=/usr/local/bin/myapp
Restart=always
User=myuser
Group=mygroup
Environment=GO_ENV=production
StandardOutput=journal
StandardError=journal
SyslogIdentifier=myapp
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload && sudo systemctl enable --now myappjournalctl -u myapp -fjournalctl -u myapp --since "2026-01-09 00:00:00" --until "2026-01-09 12:00:00"三 文件日志与 logrotate 轮转
sudo apt-get install logrotate/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 myuser mygroup
copytruncate
}
sudo logrotate -d /etc/logrotate.d/myapp(干跑)sudo logrotate -f /etc/logrotate.d/myappimport (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"github.com/natefinch/lumberjack"
)
writer := zapcore.AddSync(&lumberjack.Logger{
Filename: "/var/log/myapp/app.log",
MaxSize: 100, // MB
MaxBackups: 30, // 保留个数
MaxAge: 7, // 保留天数
Compress: true,
})
core := zapcore.NewCore(
zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
writer,
zap.InfoLevel,
)
logger := zap.New(core)
defer logger.Sync()
logger.Info("started")
四 集中化采集与分析
五 实践要点与排错清单
systemctl status myappjournalctl -u myapp -fls -lh /var/log/myapp/、logrotate -d /etc/logrotate.d/myappnamei -l /var/log/myapp/app.log。