package main
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)
// 配置初始化高性能Zap日志库
func InitZapLogger() (*zap.Logger, error) {
// 根据需求配置日志的编码器,如果要使用JSON编码就使用NewJSONEncoder
encoderConfig := zapcore.EncoderConfig{
TimeKey: "time",
LevelKey: "level",
NameKey: "logger",
CallerKey: "caller",
MessageKey: "msg",
StacktraceKey: "stacktrace",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.LowercaseLevelEncoder, // 小写编码器
EncodeTime: zapcore.ISO8601TimeEncoder, // ISO8601时间格式
EncodeDuration: zapcore.SecondsDurationEncoder, // 持续时间秒数
}
// 设置日志级别
atom := zap.NewAtomicLevelAt(zap.InfoLevel)
// 配置日志的写入器,使用"lumberjack"进行日志轮转
writeSyncer := zapcore.AddSync(&lumberjack.Logger{
Filename: "./logs/myapp.log", // 日志文件路径
MaxSize: 100, // 每个日志文件最大100MB
MaxAge: 7, // 最多保留7天的日志文件
MaxBackups: 3, // 最多保留3个备份
Compress: true, // 压缩日志文件
})
// 构建Zap日志库的核心
core := zapcore.NewCore(
zapcore.NewConsoleEncoder(encoderConfig), // 控制台编码器
writeSyncer, // 写入器
atom, // 日志级别
)
// 构建Zap日志库
logger := zap.New(core)
return logger, nil
}
func main() {
logger, err := InitZapLogger()
if err != nil {
panic(err)
}
defer logger.Sync()
logger.Info("This is an info message")
logger.Error("This is an error message")
}
这段代码首先定义了一个配置初始化高性能Zap日志库的函数InitZapLogger
,它设置了日志的编码器、日志级别、写入器,并使用了"lumberjack"日志轮转库来管理日志文件。然后在main
函数中,我们创建了一个日志库实例,并使用不同级别的日志方法进行了日志记录。这个例子展示了如何在Go语言中使用Zap日志库进行高效的日志记录。