一文理清GO语言日志库实现开发项目中的日志功能(rotatelogs/zap分析)
package main
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
"os"
)
// 初始化Logger
func NewLogger() (*zap.Logger, error) {
// 配置日志输出到文件, 并按照时间滚动
writeSyncer := getLogWriter()
encoder := getEncoder()
core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)
return zap.New(core), nil
}
// 创建滚动日志写入器
func getLogWriter() zapcore.WriteSyncer {
lumberJackLogger := &lumberjack.Logger{
Filename: "./logs/myapp.log", // 日志文件路径
MaxSize: 100, // 每个日志文件最大大小(MB)
MaxAge: 7, // 日志文件保留天数
MaxBackups: 3, // 日志文件保留的个数
Compress: true, // 是否压缩
}
return zapcore.AddSync(lumberJackLogger)
}
// 创建日志编码器
func getEncoder() zapcore.Encoder {
return zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
}
func main() {
logger, err := NewLogger()
if err != nil {
panic(err)
}
defer logger.Sync()
logger.Info("This is an info level log message")
logger.Error("This is an error level log message")
}
这段代码首先定义了一个NewLogger
函数来初始化一个Logger,配置了滚动日志的输出,并使用JSON格式进行编码。在main
函数中,我们创建了一个Logger实例,并记录了一条Info级别和一条Error级别的日志消息。这个例子展示了如何在Go语言项目中使用第三方库(如lumberjack
和zap
)来实现日志管理功能。
评论已关闭