乐趣区

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,肯定还写得不太好,发出来主要是大家交流交流。如果有同实现的更好的工具这里也求个推荐,我实在是找不到了。另外如果写得有不对的地方,可以指正,但是请不要杠,我也刚学,不要杠!杠精请走开!


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

退出移动版