log4g:站在巨人的頭上實現一個可配置的Go日誌庫

鵬徙南暝發表於2019-10-17

更多精彩博文,歡迎訪問我的個人部落格


前言

本人Java程式設計師一枚,眼看著這幾年Go的勢頭不錯,本著技多不壓身的原則,也隨大流慢慢學習。不得不說Go其實跟Java差別還是挺大的,畢竟習慣了物件導向的思想,一時間也有點接受不過來。俗話說實踐才能出真知,本想著拿剛學的點皮毛練練手,結果就遇到了一個問題:日誌。

Go語言不像Java中有諸如Log4j的大哥存在,其自帶的log庫其實功能有限。雖然催生出了諸如logrus、zap等一系列優秀的三方日誌庫,但在github上找了半天始終沒有找到一款符合自己需求的。

我需求的日誌庫功能

本來是想要一個支援日誌分割,並且支援通過配置將日誌分級別輸出到不同目錄的功能(好吧我就是覺得log4j真不錯),但很多三方庫都不支援這個功能。誠然,將日誌寫入logstash或者資料庫等已經越來越成為主流,但不能分割日誌難免有些遺憾。

於是想著去網上copy一下,應該有現成的,但是找了一圈要麼就是複製貼上的,要麼就跟我想要的效果不一樣,於是便想著自己動手實現一個。logrus不是支援hook麼,那還不好說麼(大概吧)?

自己實現一個日誌庫

想象中的實現應該是這個樣子:

程式碼太麻煩就不貼上了,成品已經放在github:github.com/jptangchina…

直接就可以使用:

package main

import log "github.com/jptangchina/log4g"

func main() {
  log.Info("Test info output")
}
複製程式碼

主要實現瞭如下功能:

  1. 配置檔案配置輸出行為,包括檔案大小分割,時間分割,日誌等級等
  2. 當輸出到檔案時遮蔽logrus控制檯輸出
  3. 不同級別的日誌可以輸出到不同檔案
  4. 不同級別日誌可以輸出到相同檔案
  5. 哎呀,說不清楚,可以自行體會

總結

總的來講,要真完全自己寫,還是挺難寫的,好在前人做足了功夫。不過自己也才剛開始學習Go,肯定還寫得不太好,發出來主要是大家交流交流。如果有同實現的更好的工具這裡也求個推薦,我實在是找不到了。另外如果寫得有不對的地方,可以指正,但是請不要槓,我也剛學,不要槓!槓精請走開!


更多精彩博文,歡迎訪問我的個人部落格

相關文章