加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 09:31:53 所属栏目:大数据 来源:网络整理
导读:开发任何项目,都离不开日志,配好自己的项目日志输出,往往是开发项目的前提。在golang中,seelog应该是比较有名的日志处理包了,功能非常强大,seelog官方文档 一、seelog主要功能 下面我们看看seelog有啥强大 设置不同级别的日志; 输出到终端或文件; 过

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

一、seelog主要功能
下面我们看看seelog有啥强大

设置不同级别的日志;
输出到终端或文件;
过滤指定级别日志;
定义多种不同的日志输出格式;
根据触发日志的文件名或者函数名来区别输出日志;
通过 SMTP 或 TCP 转发日志(网络转发日志);
滚动日志文件(过期日志自动清除)。
二、安装seelog
$ go get github.com/cihub/seelog

?

三、使用seelog
我们先看看一个官方的demo

package main

import (
log "github.com/cihub/seelog"
)

func main() {
defer log.Flush()
log.Info("Hello from Seelog!")
}

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

import (
log "github.com/cihub/seelog"
)

func SetupLogger() {
logger,err := log.LoggerFromConfigAsFile("seelog.xml")
if err != nil {
return
}

log.ReplaceLogger(logger)
}

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

<seelog>
<exceptions>
<exception ... />
<exception ... />
...
</exceptions>
<outputs>
<splitter>
<console/>
<file ... />
<rollingfile ... />
<smtp>
...
</smtp>
<buffered>
...
</buffered>
<conn ... />
</splitter>
<filter>
...
</filter>
</outputs>
<formats>
<format ... />
<format ... />
...
</formats>
</seelog>

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

<!-- type 设置记录器类型 https://github.com/cihub/seelog/wiki/Logger-types-reference
minlevel 设置日志最低级别; maxlevel 设置日志的最高级别
也可以通过 <seelog levels="trace,info,critical"> 设置日记级别 -->
<seelog type="asynctimer" asyncinterval="5000000" minlevel="debug" maxlevel="error">
<exceptions>
<!-- <exception> 是为特定的程序文件(filepattern)或函数(funcpattern)设定特殊的日志规则 -->
<exception funcpattern="*main.test*Something*" minlevel="info"/>
<exception filepattern="*main.go" minlevel="error"/>
</exceptions>

<!-- <outputs> formatid 指定日志输出的格式(格式在<formats>标签中定义) -->
<outputs formatid="main">
<!-- <console> 标签表示输出到终端 -->
<console/>

<!-- <splitter> 用于细分<outputs>日志格式,内部支持:file(文件),rollingfile(滚动文件,自动清除过期),
buffered(日志写到内存再写到文件),smtp(发送日志到邮件),con(网络转发) -->
<splitter formatid="format1">
<!-- log.log,log2.log将按<formats>标签中的id="format1"格式写入 -->
<file path="log.log"/>
<file path="log2.log"/>
</splitter>
<splitter formatid="format2">
<file path="log3.log"/>
<file path="log4.log"/>
</splitter>

<!-- <rollingfile>滚动文件(定期清除过期日志)
formatid: 指定日志格式; type="size" 按大小; maxsize: 单日志文件最大大小; maxrools: 最大文件数 -->
<rollingfile formatid="someformat" type="size" filename="./log/roll.log" maxsize="100" maxrolls="5" />

<!-- <buffered> 将日志先存在内存中,定期写入文件,适合日志并发量较大或 IO 比较紧张的场合
size: 缓存大小; flushperiod: 缓存间隔(毫秒) -->
<buffered formatid="testlevels" size="10000" flushperiod="1000">
<file path="./log/bufFileFlush.log"/>
</buffered>

<!-- <filter>用于单独处理某级别日志
过滤日志,把级别是error的通过邮件smtp方式发送出去(一般会发给相应的运维人员) -->
<filter levels="error">
<file path="./log/error.log"/>
<smtp senderaddress="[email?protected]"
sendername="Automatic notification service"
hostname="mail.none.org"
hostport="587"
username="nns"
password="123">
<recipient address="[email?protected]"/>
<recipient address="[email?protected]"/>
</smtp>
<!-- 按tcp4网络协议发送日志 -->
<conn net="tcp4" addr="server.address:5514" tls="true" insecureskipverify="true" />
</filter>

</outputs>

<!-- <formats> 定制日志的输出格式
https://github.com/cihub/seelog/wiki/Format-reference -->
<formats>
<format id="main" format="%Date(2006 Jan 02/3:04:05.000000000 PM MST) [%Level] %Msg%n"/>
<format id="someformat" format="%Ns [%Level] %Msg%n"/>
<format id="testlevels" format="%Level %Lev %LEVEL %LEV %l %Msg%n"/>
<format id="usetags" format="&lt;msg&gt;%Msg&lt;/time&gt;"/>
<format id="format1" format="%Date/%Time [%LEV] %Msg%n"/>
<format id="format2" format="%File %FullPath %RelFile %Msg%n"/>
</formats>
</seelog>

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

<!-- 我只需要把日志按指定格式输出到终端 -->
<seelog type="asynctimer" asyncinterval="1000000" minlevel="debug" maxlevel="error">
<outputs formatid="main">
<!-- 仅输出到终端 -->
<console/>
</outputs>
<formats>
<!-- 设置格式 -->
<format id="main" format="%UTCDate %UTCTime - [%LEV] - %RelFile - l%Line - %Msg%n"/>
</formats>
</seelog>

<!-- ****** 我是分割线 ***** -->

<!-- 现在我想把日志输出到终端同时也把日志输出到文件 --><seelog type="asynctimer" asyncinterval="1000000" minlevel="debug" maxlevel="error"> <outputs formatid="main"> <console/> <!-- 输出到文件,且不同于终端的日志格式 --> <splitter formatid="format1"> <file path="log.log"/> </splitter> </outputs> <formats> <!-- 设置格式 --> <format id="main" format="%UTCDate %UTCTime - [%LEV] - %RelFile - l%Line - %Msg%n"/> <format id="format1" format="%Date(2006 Jan 02/3:04:05.000000000 PM MST) [%Level] %Msg%n"/> </formats></seelog>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读