一文理清GO语言日志库实现开发项目中的日志功能(rotatelogs/zap分析)
    		       		warning:
    		            这篇文章距离上次修改已过451天,其中的内容可能已经有所变动。
    		        
        		                
                
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)来实现日志管理功能。
评论已关闭