首页 > 其他分享 >Go使用zap和lumberjack库,实现每小时间轮转日志文件

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

时间:2024-12-20 15:54:05浏览次数:3  
标签:每小 zapcore lumberjack go Go logger 日志 zap

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

相关文章

  • 「SP14887」 GOODA
    题意给定一个 \(n\) 个点 \(m\) 条边的有向图,每个点都有点权,求一条从 \(S\) 到 \(E\) 的路径,使路径经过的点权值之和最大。可以多次经过一条边或者一个点,但每个点的权值最多计算一次。分析和P3387很像。对原图缩点后得到一张DAG,然后在图上跑类似最短路,实际是拓扑......
  • golang单元测试和mock框架的介绍和推荐
    背景介绍:探索golang的单元测试框架,看一下哪种框架是结合业务体验更好的。推荐和不推荐使用的框架,我都会在标题中标注出来,没有标注的表示体验一般,但也没有特别的缺点,观望态度单元测试框架介绍原生testing示例funcTestModifyArr(t*testing.T){ arr:=[3]int{0,1,2}......
  • Python旅游信息管理系统v7c4w(Pycharm Flask Django Vue mysql)
    文章目录项目介绍和开发技术介绍具体实现截图开发技术开发与测试:设计思路系统测试可行性分析核心代码部分展示文章目录/写作提纲参考源码/演示视频获取方式项目介绍和开发技术介绍旅游信息管理系统的现状来进行开发的,具体根据现实的需求来实现旅游信息管理系统网络......
  • Python古玩玉器藏品交易系统(Pycharm Flask Django Vue mysql)
    文章目录项目介绍和开发技术介绍具体实现截图开发技术开发与测试:设计思路系统测试可行性分析核心代码部分展示文章目录/写作提纲参考源码/演示视频获取方式项目介绍和开发技术介绍实现了一个古玩玉器交易系统。古玩玉器交易系统的主要用户分为用户、管理员。管理员......
  • Django使用openpyxl实现数据的导入与导出
    将序列化后的数据导出成excel格式#导入依赖importiofromopenpyxlimportWorkbook#将格式化的数据导出为excel的方法defoutput_excel(data):#创建Excel工作簿wb=Workbook()ws=wb.activews.title="文件标题"#写入表头headers=......
  • golang中延迟函数调用的知识点
    golang中延迟函数调用的知识点个较大的延迟调用队列可能会消耗很多内存。另外,某些资源可能因为某些调用被延迟的太久而未能被及时释放。比如,如果下面的例子中的函数需要处理大量的文件,则在此函数退出之前,将有大量的文件句柄得不到释放。funcwriteManyFiles(files[]File)er......
  • 5.8K star!基于Go的可视化定时任务管理系统!
    *戳上方蓝字“开源先锋”关注我  推荐阅读: 《12.6Kstar!Shell命令即搞定可视化监控,超级6~~》 《5.6Kstar!再见了DocSend,这款开源项目更不错!》 《4.1Kstar!跨屏操作的神器,流畅丝滑!》 《9.1Kstar!国外大神1:1复刻Win11系统,开源牛逼!》 《2.8Kstar!超强音乐管理......
  • Go 监听8080端口
    创建一个文件夹,命名为 HttpServer2,打开这个文件夹打开终端,点击左下角叉和感叹号在弹出的窗口中点击TERMINAL进入终端(也可以使用快捷键CTRL+` 直接打开) 初始化Go的ModulegomodinitHttpServer2点击文件创建图标创建文件创建一个名为main.go的文件,按下回......
  • Golang内存模型与源码解析
    0、引言本篇笔记用于记录作者在学习Golang的GC模型之前,对Golang内存模型的学习。目前使用的Go版本为1.22.41、Golang内存管理宏观结构假设我们每次向内存池申请空间时,都需要频繁地向操作系统发出请求,这不仅会增加内存分配的时间,还可能引入竞争和锁的开销,从而导致性能瓶颈。尤其......
  • golang的互斥锁和读写锁
    golangmutex(互斥锁)1.锁最本质的作用保证原子性2.mutex使用原则适用于并发编程,尽量减少加锁区域的逻辑3.mutex的局限性仅限于单个进程内操作sema(信号量,semaphore的简称)是一种用于并发控制的机制资源计数:信号量维护一个资源计数。这个计数表示当前可用的资源数量获......