博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计自用的golang日志模块
阅读量:4353 次
发布时间:2019-06-07

本文共 1568 字,大约阅读时间需要 5 分钟。

设计自用的golang日志模块

golang的原生日志模块不能满足需求,而开源的第三方包,也不完全够用。用户较多的logrus,却没有rotate功能,这已经是众所周知的。对于运维来说,当然是希望日志的处理中比较简单、实用、够用。不需要额外的通过系统来实现logrotate。

1、需求

从需求方面来说,主要有几个方面:

一方面肯定是需要有轮转功能,而且要限制保留的日志份数。至于是按文件大小,还是按天、按小时切割,则可以讨论。

另一方面,对于日志的级别,如果能够动态调整,则方便日志关闭常规日志,在线调试时,动态降低日志的等级,打印更多debug日志。

2、调研

目前主要的有几个:

  • github.com/sirupsen/logrus。用户广泛,但明确表示不支持日志切割功能,建议通过hook走日志系统。
  • github.com/natefinch/lumberjack。支持以文件大小的方式切割日志。用户偏少。
  • gopkg.in/inconshreveable/log15.v2。比较老牌。
  • github.com/lestrrat-go/file-rotatelogs。基于小时数进行切割的小众包。
  • github.com/xiaomi-tc/log15。小米基于log15写的二次封装增加了切割功能。但只有2星。
  • 有前同事基于log15写的二次封装,但log15.v2/ext的包不太容易理解。
  • github.com/ngaut/log。完全不依赖第三方包。可基于日期及小时进行切割。

综上,ngaut比较适合学习和了解封装过程。而基于logrus则是比较靠谱的选择,底层需要其他包实现的切割功能。

3、功能设计

主要点:

  • 由logrus来完成日志功能。
  • 需要完成日志切割,历史日志需要压缩
  • 支持参考提供的level热更新

3.1 基于file-rotatelogs实现

即基于日期的日志轮转。

代码:github.com/jungle85gopy/rotlogs/daterot

示例代码:参考github.com/jungle85gopy/rotlogs/example/date/date.go

两个不足之处:

  • 该库没有压缩功能。
  • 日志目录对相对路径不友好。
    • 比如使用log/access.log时。log/access.log是个软链,链接到带日志的文件。
# ls -l loglrwxr-xr-x  1 song  staff    28 Mar  8 13:23 access.log -> log/access.log.20180308-1323-rw-r--r--  1 song  staff  2511 Mar  8 13:23 access.log.20180308-1323# tail log/access.logtail: log/access.log: No such file or directory

解决办法之一就是不使用软链,将是不主动设置BaseLinkName变量。

3.2 基于lumberjack实现

即基于文件大小的日志轮转。

代码:github.com/jungle85gopy/rotlogs

示例代码:参考github.com/jungle85gopy/rotlogs/example/size/size.go

这个版本的不足之处,在于日志切割后日志,其文件名过于复杂。可能不便后后继处理

# ls -l log abcd-2018-03-08T14-09-31.066.log.gzabcd-2018-03-08T14-26-18.794.log.gz

转载于:https://www.cnblogs.com/qinqiao/p/design-golang-log.html

你可能感兴趣的文章
.NET 泛型分析
查看>>
Discuz! X2.5数据库字典【转载】
查看>>
linux 下shell中if的“-e,-d,-f”的用法
查看>>
python 可视化时间转时间元组(自定义)
查看>>
Quartz将Job保存在数据库中所需表的说明
查看>>
<调和分析>课程
查看>>
NOIP2017提高组模拟赛 8(总结)
查看>>
HDU 2007
查看>>
【剑指offer】面试题 24. 反转链表
查看>>
给新程序员的10条建议
查看>>
phpstudy
查看>>
seajs源码
查看>>
diocp3-服务器的连接上限是到底是多少?diocp3的一个装13测试(8W连接数)
查看>>
Android5.0 TimePicker,DatePicker恢复成低版本滚动模式
查看>>
Java Vs C++
查看>>
接口(interface)那点事
查看>>
node-koa搭建MVC/RESTful API项目
查看>>
团队冲刺第二阶段05
查看>>
修剪草坪 滑动窗口
查看>>
com.nostra13.universalimageloader 加载displayImage图片时图片模糊的处理办法
查看>>