Linux环境下Golang日志高效处理实践
一 核心原则
二 推荐方案与关键配置
package main
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
"os"
)
func main() {
cfg := zap.NewProductionEncoderConfig()
cfg.EncodeTime = zapcore.ISO8601TimeEncoder
core := zapcore.NewCore(
zapcore.NewJSONEncoder(cfg),
zapcore.AddSync(&lumberjack.Logger{
Filename: "/var/log/myapp.log",
MaxSize: 100, // MB
MaxBackups: 7,
MaxAge: 30, // days
Compress: true,
}),
zap.InfoLevel,
)
logger := zap.New(core, zap.AddCaller())
defer logger.Sync()
// 异步包装(减少主线程阻塞)
async := zapcore.AddSync(zapcore.AsyncCore{Core: core})
zap.ReplaceGlobals(zap.New(async))
zap.L().Info("started", zap.String("version", "1.2.3"))
}
package main
import (
"log/slog"
"os"
"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
w := &lumberjack.Logger{
Filename: "/var/log/myapp-slog.log",
MaxSize: 100,
MaxBackups: 7,
MaxAge: 30,
Compress: true,
}
defer w.Close()
logger := slog.New(slog.NewJSONHandler(w, &slog.HandlerOptions{Level: slog.LevelInfo}))
slog.SetDefault(logger)
slog.Info("started", "version", "1.2.3")
}
三 存储与系统层优化
四 实践清单