创建一个文件夹,命名为 loggerDemo 打开这个文件夹
打开终端,点击左下角 叉和感叹号
在弹出的窗口中点击 TERMINAL 进入终端(也可以使用快捷键 CTRL+` 直接打开)
初始化 Go 的 Module
go mod init loggerDemo
点击文件创建图标创建文件
创建一个名为 main.go 的文件 ,按下 回车 确认
main.go
package main import ( "fmt" "time" "loggerDemo/logger" // 替换为你的模块路径 ) func main() { // 初始化日志记录器 logger, err := logger.NewLogger() if err != nil { fmt.Println("Failed to initialize logger:", err) return } defer logger.Sync() // 确保所有日志都被写入 // 使用日志记录器 for { logger.Info("This is an info log entry") time.Sleep(10 * time.Second) // 模拟业务逻辑 } }
再创建一个文件夹 logger 在这个文件夹中创建 logger.go
logger.go
package logger import ( "time" "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" ) // NewLogger 创建一个新的 zap 日志记录器,配置了日志轮转 func NewLogger() (*zap.Logger, error) { encoderConfig := zapcore.EncoderConfig{ TimeKey: "time", LevelKey: "level", NameKey: "logger", CallerKey: "caller", MessageKey: "msg", StacktraceKey: "stacktrace", LineEnding: zapcore.DefaultLineEnding, EncodeLevel: zapcore.LowercaseLevelEncoder, EncodeTime: customTimeEncoder, // 使用自定义时间编码器 EncodeDuration: zapcore.SecondsDurationEncoder, EncodeCaller: zapcore.ShortCallerEncoder, } // 配置lumberjack日志轮转 logWriter := &lumberjack.Logger{ Filename: "./logs/app.log", // 日志文件路径 MaxSize: 10, // 单个文件最大尺寸(MB) MaxBackups: 3, // 最多保留3个备份 MaxAge: 365, // 文件最多保存1天 Compress: true, // 是否压缩/归档旧文件 } // 创建zap核心配置 core := zapcore.NewCore( zapcore.NewJSONEncoder(encoderConfig), zapcore.AddSync(logWriter), zap.InfoLevel, ) // 创建并返回 zap 日志记录器 return zap.New(core), nil } // customTimeEncoder 自定义时间编码器,将时间戳转换为可读的日期时间字符串 func customTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) { //enc.AppendString(t.Format("2006-01-02T15:04:05.000Z07:00")) //"2024-12-20T15:18:15.546+08:00" enc.AppendString(t.Format("2006-01-02 15:04:05.000")) }
组织结构
添加 zap 包
go get go.uber.org/zap
添加 lumberjack
包作为依赖
go get gopkg.in/natefinch/lumberjack.v2
go.mod
运行后效果
标签:每小,zapcore,lumberjack,go,Go,logger,日志,zap From: https://www.cnblogs.com/hailexuexi/p/18619450