CentOS环境下利用Golang日志进行资源优化
一 核心策略与取舍
二 库与级别配置
三 输出与轮转方案
四 系统层与运行时优化
五 落地示例与验证
package main
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
"os"
)
func newZapLogger() *zap.Logger {
encCfg := zapcore.EncoderConfig{
TimeKey: "ts",
LevelKey: "level",
NameKey: "logger",
CallerKey: "caller",
MessageKey: "msg",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.CapitalLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
}
level := zap.NewAtomicLevelAt(zap.InfoLevel)
core := zapcore.NewCore(
zapcore.NewJSONEncoder(encCfg),
zapcore.AddSync(&lumberjack.Logger{
Filename: "/var/log/myapp.log",
MaxSize: 10, // MB
MaxBackups: 5,
MaxAge: 7, // days
Compress: true,
}),
level,
)
return zap.New(core, zap.AddCaller(), zap.AddStacktrace(zap.ErrorLevel))
}
func main() {
logger := newZapLogger()
defer logger.Sync()
logger.Info("service started", zap.String("version", "1.2.3"))
}
/var/log/myapp.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}