Go使用zap和lumberjack库,实现每小时间轮转日志文件

创建一个文件夹,命名为  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

 运行后效果

 

posted @   海乐学习  阅读(61)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示