golang的原生日志模块不能满足需求,而开源的第三方包,也不完全够用。用户较多的logrus,却没有rotate功能,这已经是众所周知的。对于运维来说,当然是希望日志的处理中比较简单、实用、够用。不需要额外的通过系统来实现logrotate。
1、需求
从需求方面来说,主要有几个方面:
一方面肯定是需要有轮转功能,而且要限制保留的日志份数。至于是按文件大小,还是按天、按小时切割,则可以讨论。
另一方面,对于日志的级别,如果能够动态调整,则方便日志关闭常规日志,在线调试时,动态降低日志的等级,打印更多debug日志。
2、调研
目前主要的有几个:
综上,ngaut比较适合学习和了解封装过程。而基于logrus则是比较靠谱的选择,底层需要其他包实现的切割功能。
3、功能设计
主要点:
3.1 基于file-rotatelogs实现
即基于日期的日志轮转。
代码:github.com/jungle85gopy/rotlogs/daterot
示例代码:参考github.com/jungle85gopy/rotlogs/example/date/date.go
两个不足之处:
# ls -l log lrwxr-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.log tail: 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.gz abcd-2018-03-08T14-26-18.794.log.gz
更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。
程序员编程交流QQ群:805358732
如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!