转载

log4g:站在巨人的头上实现一个可配置的Go日志库

更多精彩博文,欢迎访问 我的个人博客

前言

本人Java程序员一枚,眼看着这几年Go的势头不错,本着技多不压身的原则,也随大流慢慢学习。不得不说Go其实跟Java差别还是挺大的,毕竟习惯了面向对象的思想,一时间也有点接受不过来。俗话说实践才能出真知,本想着拿刚学的点皮毛练练手,结果就遇到了一个问题:日志。

Go语言不像Java中有诸如Log4j的大哥存在,其自带的log库其实功能有限。虽然催生出了诸如logrus、zap等一系列优秀的三方日志库,但在github上找了半天始终没有找到一款符合自己需求的。

我需求的日志库功能

本来是想要一个支持日志分割,并且支持通过配置将日志分级别输出到不同目录的功能(好吧我就是觉得log4j真不错),但很多三方库都不支持这个功能。诚然,将日志写入logstash或者数据库等已经越来越成为主流,但不能分割日志难免有些遗憾。

于是想着去网上copy一下,应该有现成的,但是找了一圈要么就是复制粘贴的,要么就跟我想要的效果不一样,于是便想着自己动手实现一个。logrus不是支持hook么,那还不好说么(大概吧)?

自己实现一个日志库

想象中的实现应该是这个样子:

代码太麻烦就不粘贴了,成品已经放在github: https://github.com/jptangchin...

直接就可以使用:

package main

import log "github.com/jptangchina/log4g"

func main() {
  log.Info("Test info output")
}

主要实现了如下功能:

  1. 配置文件配置输出行为,包括文件大小分割,时间分割,日志等级等
  2. 当输出到文件时屏蔽logrus控制台输出
  3. 不同级别的日志可以输出到不同文件
  4. 不同级别日志可以输出到相同文件
  5. 哎呀,说不清楚,可以自行体会

总结

总的来讲,要真完全自己写,还是挺难写的,好在前人做足了功夫。不过自己也才刚开始学习Go,肯定还写得不太好,发出来主要是大家交流交流。如果有同实现的更好的工具这里也求个推荐,我实在是找不到了。另外如果写得有不对的地方,可以指正,但是请不要杠,我也刚学,不要杠!杠精请走开!

更多精彩博文,欢迎访问 我的个人博客

原文  https://studygolang.com/articles/24067
正文到此结束
Loading...