golang第三方日志包seelog配置文件详解

绝地灬酷狼 2022-05-24 00:27 360阅读 0赞

开发任何项目,都离不开日志,配好自己的项目日志输出,往往是开发项目的前提。在golang中,seelog应该是比较有名的日志处理包了,功能非常强大,seelog官方文档

一、seelog主要功能

下面我们看看seelog有啥强大

  • 设置不同级别的日志;
  • 输出到终端或文件;
  • 过滤指定级别日志;
  • 定义多种不同的日志输出格式;
  • 根据触发日志的文件名或者函数名来区别输出日志;
  • 通过 SMTP 或 TCP 转发日志(网络转发日志);
  • 滚动日志文件(过期日志自动清除)。

二、安装seelog

  1. $ go get github.com/cihub/seelog

三、使用seelog

我们先看看一个官方的demo

  1. package main
  2. import ( log "github.com/cihub/seelog" ) func main() { defer log.Flush() log.Info("Hello from Seelog!") }

很简单是吧,导入包,就直接可以用了,下面我们看看如何通过配置文件高度定制我们的日志。

  1. import (
  2. log "github.com/cihub/seelog"
  3. )
  4. func SetupLogger() {
  5. logger, err := log.LoggerFromConfigAsFile("seelog.xml")
  6. if err != nil {
  7. return
  8. }
  9. log.ReplaceLogger(logger)
  10. }

seelog的配置文件一般用xml,下面我们看seelog.xml配置文件的大体框架

  1. <seelog>
  2. <exceptions>
  3. <exception ... />
  4. <exception ... />
  5. ...
  6. </exceptions>
  7. <outputs>
  8. <splitter>
  9. <console/>
  10. <file ... />
  11. <rollingfile ... />
  12. <smtp>
  13. ...
  14. </smtp>
  15. <buffered>
  16. ...
  17. </buffered>
  18. <conn ... />
  19. </splitter>
  20. <filter>
  21. ...
  22. </filter>
  23. </outputs>
  24. <formats>
  25. <format ... />
  26. <format ... />
  27. ...
  28. </formats>
  29. </seelog>

对框架有了解后,下面我们拿官方的实例配置文件来做说明:https://github.com/cihub/seelog/wiki/Example-config

  1. <!-- type 设置记录器类型 https://github.com/cihub/seelog/wiki/Logger-types-reference minlevel 设置日志最低级别; maxlevel 设置日志的最高级别 也可以通过 <seelog levels="trace,info,critical"> 设置日记级别 -->
  2. <seelog type="asynctimer" asyncinterval="5000000" minlevel="debug" maxlevel="error">
  3. <exceptions>
  4. <!-- <exception> 是为特定的程序文件(filepattern)或函数(funcpattern)设定特殊的日志规则 -->
  5. <exception funcpattern="*main.test*Something*" minlevel="info"/>
  6. <exception filepattern="*main.go" minlevel="error"/>
  7. </exceptions>
  8. <!-- <outputs> formatid 指定日志输出的格式(格式在<formats>标签中定义) -->
  9. <outputs formatid="main">
  10. <!-- <console> 标签表示输出到终端 -->
  11. <console/>
  12. <!-- <splitter> 用于细分<outputs>日志格式,内部支持:file(文件), rollingfile(滚动文件,自动清除过期), buffered(日志写到内存再写到文件), smtp(发送日志到邮件), con(网络转发) -->
  13. <splitter formatid="format1">
  14. <!-- log.log, log2.log将按<formats>标签中的id="format1"格式写入 -->
  15. <file path="log.log"/>
  16. <file path="log2.log"/>
  17. </splitter>
  18. <splitter formatid="format2">
  19. <file path="log3.log"/>
  20. <file path="log4.log"/>
  21. </splitter>
  22. <!-- <rollingfile>滚动文件(定期清除过期日志) formatid: 指定日志格式; type="size" 按大小; maxsize: 单日志文件最大大小; maxrools: 最大文件数 -->
  23. <rollingfile formatid="someformat" type="size" filename="./log/roll.log" maxsize="100" maxrolls="5" />
  24. <!-- <buffered> 将日志先存在内存中,定期写入文件,适合日志并发量较大或 IO 比较紧张的场合 size: 缓存大小; flushperiod: 缓存间隔(毫秒) -->
  25. <buffered formatid="testlevels" size="10000" flushperiod="1000">
  26. <file path="./log/bufFileFlush.log"/>
  27. </buffered>
  28. <!-- <filter>用于单独处理某级别日志 过滤日志,把级别是error的通过邮件smtp方式发送出去(一般会发给相应的运维人员) -->
  29. <filter levels="error">
  30. <file path="./log/error.log"/>
  31. <smtp senderaddress="noreply-notification-service@none.org" sendername="Automatic notification service" hostname="mail.none.org" hostport="587" username="nns" password="123">
  32. <recipient address="john-smith@none.com"/>
  33. <recipient address="hans-meier@none.com"/>
  34. </smtp>
  35. <!-- 按tcp4网络协议发送日志 -->
  36. <conn net="tcp4" addr="server.address:5514" tls="true" insecureskipverify="true" />
  37. </filter>
  38. </outputs>
  39. <!-- <formats> 定制日志的输出格式 https://github.com/cihub/seelog/wiki/Format-reference -->
  40. <formats>
  41. <format id="main" format="%Date(2006 Jan 02/3:04:05.000000000 PM MST) [%Level] %Msg%n"/>
  42. <format id="someformat" format="%Ns [%Level] %Msg%n"/>
  43. <format id="testlevels" format="%Level %Lev %LEVEL %LEV %l %Msg%n"/>
  44. <format id="usetags" format="<msg>%Msg</time>"/>
  45. <format id="format1" format="%Date/%Time [%LEV] %Msg%n"/>
  46. <format id="format2" format="%File %FullPath %RelFile %Msg%n"/>
  47. </formats>
  48. </seelog>

初次接触难免会觉得配置文件的内容有点多,难以理解,其实只要我们理解它配置文件的大体框架,然后自己试着更改配置文件,看看输出什么,就很快明白了。

  1. <!-- 我只需要把日志按指定格式输出到终端 -->
  2. <seelog type="asynctimer" asyncinterval="1000000" minlevel="debug" maxlevel="error">
  3. <outputs formatid="main">
  4. <!-- 仅输出到终端 -->
  5. <console/>
  6. </outputs>
  7. <formats>
  8. <!-- 设置格式 -->
  9. <format id="main" format="%UTCDate %UTCTime - [%LEV] - %RelFile - l%Line - %Msg%n"/>
  10. </formats>
  11. </seelog>
  12. <!-- ****** 我是分割线 ***** -->
  13. <!-- 现在我想把日志输出到终端同时也把日志输出到文件 -->
  14. <seelog type="asynctimer" asyncinterval="1000000" minlevel="debug" maxlevel="error">
  15. <outputs formatid="main">
  16. <console/>
  17. <!-- 输出到文件,且不同于终端的日志格式 -->
  18. <splitter formatid="format1">
  19. <file path="log.log"/>
  20. </splitter>
  21. </outputs>
  22. <formats>
  23. <!-- 设置格式 -->
  24. <format id="main" format="%UTCDate %UTCTime - [%LEV] - %RelFile - l%Line - %Msg%n"/>
  25. <format id="format1" format="%Date(2006 Jan 02/3:04:05.000000000 PM MST) [%Level] %Msg%n"/>
  26. </formats>
  27. </seelog>

发表评论

表情:
评论列表 (有 0 条评论,360人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java

    java常用第三方软件包  网上收集的一些常用Java开发的第三方软件包,供大家参考  1.Apache POI  处理office文档用到的2. IText    P

    相关 python

    Chardet,字符编码探测器,可以自动检测文本、网页、xml的编码。 colorama,主要用来给文本添加各种颜色,并且非常简单易用。 Prettytable,主要用于在