在Debian系统中使用Golang记录日志时,可遵循以下最佳实践:
选择合适的日志库
log:适合简单场景,支持基本日志级别和文件输出。结构化日志与字段
使用JSON格式输出日志,添加上下文字段(如user_id、request_id),便于后续分析。
// zap示例:添加结构化字段
logger.Info("User login", zap.String("user_id", "123"), zap.String("ip", "192.168.1.1"))
日志级别与动态配置
INFO/WARN级别,避免DEBUG日志过多影响性能。日志轮转与归档
使用lumberjack库实现日志按大小、天数轮转,并压缩旧日志。
// 配置lumberjack轮转
log.SetOutput(&lumberjack.Logger{
Filename: "/var/log/app.log",
MaxSize: 10, // MB
MaxBackups: 3,
MaxAge: 7, // 天
Compress: true,
})
性能优化
zapcore.AddSync)减少I/O阻塞。集中式日志管理
集成ELK(Elasticsearch+Logstash+Kibana)或EFK(Elasticsearch+Fluentd+Kibana)堆栈,实现日志的集中存储、检索和分析。
安全与合规
监控与告警
通过Prometheus+Grafana监控日志指标(如错误率、日志量),设置异常告警规则。
参考资料: