您的位置:首页 > 编程语言 > Go语言

Golang seelog 使用入门简介

2018-02-05 16:05 155 查看

1 首先安装Seelog库

go get github.com/cihub/seelog


2 简单的日志输出

参考官方文档,些一个快速开始的 hello world 程序:

package main

import log "github.com/cihub/seelog"

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


3 输出到文件

3.1 使用 xml 配置文件

接下来我们些一个配置文件,使得 log 信息写入到本地文件。

<seelog type="asynctimer" asyncinterval="5000000" minlevel="trace" maxlevel="error">
<outputs formatid="common">

<buffered formatid="common" size="10000" flushperiod="1000">

<rollingfile type="date" filename="./log/test.log" datepattern="02.01.2006" fullname="true" maxrolls="30"/>

</buffered>

</outputs>

<formats>
<!--

<format id="common" format="%Date %Time %EscM(46)[%LEV]%EscM(49)%EscM(0) [%File:%Line] [%Func] %Msg%n" />
-->
<format id="common" format="%Date %Time [%LEV] [%File:%Line] [%Func] %Msg%n" />
</formats>
</seelog>


其中:

outputs——里面是日志的配置,其中formatid中的id指定的是标签中的id,也就是按照format标签中格式来输出日志

buffered——指的是缓冲设置,size表示缓冲区大小,单位为byte。flushperiod表示刷新时间间隔,单位为ms

rollingfile——指定日志设置,type指定回滚方式,data表示按时期回滚,maxrolls表示最大重命名文件数。

按上述文件进行配置,则可以保存30天内的日志数据。个人还是比较喜欢这种配置方式的。当然对于更高级的配置,请参考官方文档。链接如下:

https://github.com/cihub/seelog/wiki/Receiver-reference

接下来我们修改下刚才的go代码。

package main

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

func main() {
defer log.Flush()

//加载配置文件
logger, err := log.LoggerFromConfigAsFile("config.xml")

if err!=nil{

fmt.Println("parse config.xml error")
}

//替换记录器
log.ReplaceLogger(logger)

for i:=0;i<1024;i++{

log.Info("Hello from Seelog!")
}
}


3.2 使用字节配置

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

type LogCfg struct {
Levels              string `json:"levels"`
Fmt_id              string `json:"fmt_id"`
Roll_type           string `json:"roll_type"`
File_name           string `json:"file_name"`
Roll_type_param     string `json:"roll_type_param"`
Roll_type_max_rolls string `json:"roll_type_max_rolls"`
}

type LocalLogInterface log.LoggerInterface

func RollingFile( cfg LogCfg ) ( LocalLogInterface, error ) {

logConfig_Temp := `
<seelog type="sync" levels="%s" >
<outputs formatid="%s">
<rollingfile type="%s" filename="%s" %s="%s" maxrolls="%s" />
</outputs>
<formats>
<format id="main" format="[%%Date %%Time] [%%LEV] %%Func(): %%Msg%%n"/>
<format id="sub1" format="[%%Date %%Time] [%%LEV]: %%Msg%%n"/>
<format id="sub2" format="[%%Date - %%Time] [%%LEV] %%Func(): %%Msg%%n"/>
</formats>
</seelog>`

cfg_roll_type_map := map[string] string { "da
4000
te":"datepattern", "size":"maxsize" }

roll_type_param_key, _ := cfg_roll_type_map[cfg.Roll_type]

logConfig := fmt.Sprintf(  logConfig_Temp,
cfg.Levels,
cfg.Fmt_id,
cfg.Roll_type,
cfg.File_name,
roll_type_param_key,
cfg.Roll_type_param,
cfg.Roll_type_max_rolls  )

logger, err := log.LoggerFromConfigAsBytes( []byte( logConfig ) )

if err != nil {
fmt.Println( err )
}

loggerErr := log.ReplaceLogger( logger )

if loggerErr != nil {
fmt.Println( loggerErr )
}

return logger, err
}


本地日志通过对第三方包 “github.com/cihub/seelog” 做的二次封装,主要目的是为了清晰地定义一部分日志格式和统一配置文件为 json 格式,方便使用。

配置说明

"levels":               "info, trace, error, critical",
"fmt_id":               "main",
"roll_type":            "date",
"file_name":            "./log/manyrolls_date.log",
"roll_type_param":      "20180101",
"roll_type_max_rolls":  "4"


levels
定义日志都输出哪些等级的日志,可在以下内容中选择任意数量的等级以逗号区分:trace,debug,info,warn,error,critical。

fmt_id
日志格式 ID,目前代码中预定义的有 main,sub1,sub2.

main: [2018-02-05 14:14:43] [INF] InitSqlPtr(): initSql init complete.

sub1: [2018-02-05 14:14:43] [INF] InitSql init complete.

sub2: [2018-02-05 - 14:14:43] [INF] InitSqlPtr(): initSql init complete.

roll_type
回滚方式,选项 date 和 size,如果为 date 将会按照时间拆分日志,如果为 size 将会按照 size 拆分日志。

file_name
日志输出文件路径。

roll_type_param
日志输出拆分参数,当
roll_type
为 date 时,这个参数应该设置为
20180101
,为时间限制; 当
roll_type
为 date 时,这个参数应设为
102400
,为日志尺寸限制。

roll_type_max_rolls
日志最大拆分次数,如果设置为 4 , 当第五次回滚拆分的时候,将会删除历史日志最早的那只文件。

使用举例

logger, err := log.RollingFile( LocalLogCfg )
if nil != err {
panic( err )
}

// 格式化输出
logger.Infof( "cfg -->> %#v", LocalLogCfg )

// 输出内容
logger.Trace("Test messagedddd!")
logger.Debug("Debug Printed")
logger.Info("Info Printed")
logger.Warn("Warn Printed")
logger.Error("Error Printed")
logger.Critical("Critical Printed")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  seelog 配置
相关文章推荐