Golang 在 Debian 上的日志最佳实践
一 核心原则
二 日志库与输出配置
三 文件轮转与系统服务集成
sudo apt-get install logrotate/etc/logrotate.d/myapp:/var/log/myapp.log {
daily
missingok
rotate 7
compress
notifempty
create 0640 root adm
}
myapp.service 片段:[Unit]
Description=My Golang Application
After=network.target
[Service]
ExecStart=/usr/local/bin/myapp
Restart=always
User=myuser
Group=mygroup
Environment=GO_ENV=production
[Install]
WantedBy=multi-user.target
四 安全与合规
五 监控、告警与查询
六 快速实践示例(zap + systemd + logrotate)
package main
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"os"
)
func main() {
cfg := zap.Config{
Level: zap.NewAtomicLevelAt(zap.InfoLevel),
Encoding: "json",
EncoderConfig: zapcore.EncoderConfig{
TimeKey: "ts",
LevelKey: "level",
MessageKey: "msg",
StacktraceKey: "stacktrace",
EncodeLevel: zapcore.LowercaseLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
},
OutputPaths: []string{"stdout"},
ErrorOutputPaths: []string{"stderr"},
Sampling: &zap.SamplingConfig{
Initial: 100,
Thereafter: 100,
},
}
logger, _ := cfg.Build()
defer logger.Sync()
logger.Info("service started", zap.String("version", "1.2.3"))
}
/etc/logrotate.d/myapp 配置轮转策略,实现生产可用的日志闭环。