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


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

  • 相关阅读:
    IIS7.5应用程序池集成模式和经典模式的区别介绍(转)
    (转)Extjs4 展示图片与图片的更新
    webservices发布后远程无法调试的解决方法
    .Net通过OleDb方式读取Excel
    1000个JQuery插件(转载)
    2006年中科大计算机考研复试机试题
    2. 最好使用C++转型操作符
    16. 谨记8020法则
    英语阅读理解中表示作者态度的词汇汇总
    5. 对定制的“类型转换函数”保持警觉
  • 原文地址:https://www.cnblogs.com/jptangchina/p/11695184.html
Copyright © 2011-2022 走看看