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


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


    前言

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

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

    我需求的日志库功能

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

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

    自己实现一个日志库

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

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

    直接就可以使用:

    package main
    
    import log "github.com/jptangchina/log4g"
    
    func main() {
      log.Info("Test info output")
    }
    

    主要实现了如下功能:

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

    总结

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


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

  • 相关阅读:
    巧用boost库实现字符串映射消息处理函数
    Apache Continuum 1.3.6 GA 发布下载
    NetBeans 时事通讯(刊号 # 98 Apr 08, 2010)
    source insight
    vim 树形目录插件NERDTree安装及简单用法 心灵净土 博客频道 CSDN.NET
    Janus: Vim Distribution
    vim中的复制与粘贴 | WangYan BLog
    ctagsrevised
    vi的复制粘贴命令_简简单单_百度空间
    贴个自个用的vimrc zmlovelx(帅得不敢出门 c/c++群31843264) 博客频道 CSDN.NET
  • 原文地址:https://www.cnblogs.com/jptangchina/p/11695184.html
Copyright © 2020-2023  润新知