创建一个文件夹,命名为 loggerDemo 打开这个文件夹
打开终端,点击左下角 叉和感叹号
在弹出的窗口中点击 TERMINAL 进入终端(也可以使用快捷键 CTRL+` 直接打开)
初始化 Go 的 Module
go mod init loggerDemo
点击文件创建图标创建文件
创建一个名为 main.go 的文件 ,按下 回车 确认
main.go
package mainimport ("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 loggerimport ("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
运行后效果