实现功能

    info debug 级别的日志输出到 /path/log/demo.log
    warn error .... 级别的日志输出到 /path/log/demo_error.log
    日志自动按小时分割 最多保留7天的日志

依赖的第三方包github地址

    https://github.com/uber-go/zap

    https://github.com/lestrrat-go/file-rotatelogs

​    zap提供日志分级,打点key-value参数等功能,而file-foratelogs则提供日志自动按时间分割的功能,github上start数比较多的 https://github.com/natefinch/lumberjack 也提供类似功能,但是是根据文件大小分片,感觉除非借助其他工具,否则找某个时间点的日志时,体验可能不是那么友好。

demo代码

package demoimport (rotatelogs "github.com/lestrrat-go/file-rotatelogs""go.uber.org/zap""go.uber.org/zap/zapcore"
)var Logger *zap.Loggerfunc init() {// 设置一些基本日志格式 具体含义还比较好理解,直接看zap源码也不难懂encoder := zapcore.NewConsoleEncoder(zapcore.EncoderConfig{MessageKey:  "msg",LevelKey:    "level",EncodeLevel: zapcore.CapitalLevelEncoder,TimeKey:     "ts",EncodeTime: func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {enc.AppendString(t.Format("2006-01-02 15:04:05"))},  CallerKey:    "file",EncodeCaller: zapcore.ShortCallerEncoder,EncodeDuration: func(d time.Duration, enc zapcore.PrimitiveArrayEncoder) {enc.AppendInt64(int64(d) / 1000000)},  })// 实现两个判断日志等级的interfaceinfoLevel := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {return lvl < zapcore.WarnLevel})warnLevel := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {return lvl >= zapcore.WarnLevel})// 获取 info、warn日志文件的io.Writer 抽象 getWriter() 在下方实现infoWriter := getWriter("/path/log/demo.log")warnWriter := getWriter("/path/log/demo_error.log")// 最后创建具体的Loggercore := zapcore.NewTee(zapcore.NewCore(*encoder, zapcore.AddSync(infoHook), infoLevel),zapcore.NewCore(*encoder, zapcore.AddSync(warnHook), warnLevel),)Logger = zap.New(core, zap.AddCaller())  // 需要传入 zap.AddCaller() 才会显示打日志点的文件名和行数, 有点小坑
}func getWriter(filename string) io.Writer {// 生成rotatelogs的Logger 实际生成的文件名 demo.log.YYmmddHH// demo.log是指向最新日志的链接// 保存7天内的日志,每1小时(整点)分割一次日志hook, err := rotatelogs.New(filename+".%Y%m%d%H", // 没有使用go风格反人类的format格式rotatelogs.WithLinkName(filename),rotatelogs.WithMaxAge(time.Hour*24*7),rotatelogs.WithRotationTime(time.Hour),)   if err != nil {panic(err)}   return hook
}

​    zap.NewCore接收的参数是io.Writer而不是自己包的struct,开发者可以按需传入自己需要的io.Writer 挺好。

转载于:https://www.cnblogs.com/Me1onRind/p/10918863.html

zap+日志分级分文件+按时间切割日志整合demo相关推荐

  1. svn服务器日志在哪个文件夹,SvnLog(svn日志导出工具)

    SvnLog是一款可以帮助您搜索日志的工具,当您在操作SVN服务器的时候,为了知道自己执行了哪些项目,知道服务器运行的日常情况,知道在服务器上修改的文件,您可以通过日志搜索的方式直接查看记录的数据,在 ...

  2. 组件分享之后端组件——用于将日志写入滚动文件的组件包lumberjack

    组件分享之后端组件--用于将日志写入滚动文件的组件包lumberjack 背景 近期正在探索前端.后端.系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包 ...

  3. golang xorm 自定义日志记录器,使用zap实现日志输出、切割日志

    目录 1.准备并下载好需要的包 2. 连接postgresql数据库 3. zap日志工具 4.实现xorm 自定义日志记录器 5.使用 完整代码 1.准备并下载好需要的包 xorm.io/xorm ...

  4. Linux使用logrotate来切割日志文件

    程序在运行的时候为了了解运行状态,会输出日志文件,时间久了日志文件会变得非常大,甚至达到GB级别.我在golang应用里使用logrus包来打日志,配置和使用都很方便,就是没有日志分割的功能,应用在线 ...

  5. 在单缓冲区和双缓冲区结构下,读入并分析完该文件的时间分别是

    链接:https://www.nowcoder.com/questionTerminal/5a9eff01452240a7a97495cef08ad3f6?toCommentId=398027 来源: ...

  6. linux 截取某一段时间的日志,存储到另一个文件中

    使用sed命令提取指定时间段日志内容 sed -n '/2021-07-17 03:53:23.866076/,/2021-07-17 03:53:26.912142/p' mission_contr ...

  7. lumberjack 实现按时间分割日志文件

    欢迎光临小弟的博客maliweb.top lumberjack 实现按时间分割日志文件(如有问题 欢迎各位大佬指教感谢) loggerWrite := &lumberjack.Logger{F ...

  8. linux设置日志文件保存时间方法

    在Linux中,通常使用日志轮转(Log rotation)来控制日志文件的保留和管理.日志轮转允许您在生成新日志文件时将旧日志文件归档或删除.可以使用logrotate 工具来配置和管理日志轮转. ...

  9. linux 打开上一级目录,linux开机启动过程、PATH、过滤一级目录、cd的参数、ls -lrt、命令切割日志...

    第二波命令正向我方来袭 :开机启动过程.PATH.过滤一级目录.cd的参数.ls -lrt.命令切割日志 1.1 linux开机启动过程 1.1.1 开机自检(BIOS)-- MBR引导-- GRUB ...

最新文章

  1. 现代hy-9600音响_从音响工程师到软件工程师-为什么我要学习编码
  2. 中国中医药产业未来投资规划与前景风险预测报告2022-2027年版
  3. VTK:PolyData之KochanekSpline
  4. [Umbraco] 创建第一个页面
  5. 扫描指定包并解析为BeanDefinition
  6. 注意| .NET开发者大会防疫须知 !
  7. sklearn中lstm_分别用sklearn和tensorflow做房价预测
  8. Linux创建oracle11实例
  9. git+repo 代码提交
  10. 自动化审批决策树助你面试更上一层楼
  11. 矩池云安装PyQt5,并在VNC中测试使用
  12. hadoop编程-maven环境搭建
  13. python celery异步_python celery 异步学习
  14. dirver时区_MySQL JDBC驱动程序5.1.33-时区问题
  15. 信息系统项目管理师(2022年)—— 重点内容:项目变更管理(16)
  16. C语言学习教程:搬箱子游戏开发源码分享
  17. mysql插入微信名称中的特殊字符
  18. 《星际穿越》科学解析
  19. Ubuntu18.04 安装Docker 报错:Signed-By 中含有互相冲突的值
  20. 冷门创业项目:自媒体赚钱速成之搬运大法

热门文章

  1. python 如何将代码中的输入保存到txt里边
  2. nlp算法文本向量化_NLP中的标记化算法概述
  3. local_irq_save和 local_irq_disable
  4. 使用函数实现数据大小端转换
  5. wordpress 外部数据接口_wordpress登录api接口
  6. python特征工程插件_手把手教你用Python实现自动特征工程
  7. golang延时_golang 实现延迟消息原理与方法
  8. JAVA vector的遍历_谈谈vector容器的三种遍历方法
  9. 查找unity工程代码中中文字符
  10. matlab之norm函数