CentOS中Golang日志常见问题与对策
一 路径与权限类问题
二 日志轮转与磁盘占满
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
说明:按日轮转、保留7天、压缩旧日志、目录不存在不报错、空文件不轮转、采用copytruncate避免重启应用。&lumberjack.Logger{
Filename: "/var/log/myapp.log",
MaxSize: 100, // 100MB
MaxBackups: 3, // 保留3个
MaxAge: 28, // 保留28天
Compress: true, // 压缩
}
三 格式不规范与难以解析
log := logrus.New()
log.SetFormatter(&logrus.JSONFormatter{})
file, _ := os.OpenFile("/var/log/app.json.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
log.SetOutput(file)
log.WithFields(logrus.Fields{"event":"user_login","user":"admin"}).Info("User logged in")
四 并发写入与性能瓶颈
五 日志级别与系统集成配置
logger, _ := srslog.NewLogger(srslog.LOG_LOCAL0, srslog.LOG_INFO, "myapp", "mytag")
logger.Info("to syslog")
local0.* /var/log/myapp.log
重启服务:systemctl restart rsyslog。