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")
相关文章推荐
- WTK使用简介(一)——使用入门
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- 【转载整理】kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- (转)Eclipse入门-- Eclipse的使用简介及插件开发
- Schema入门之XMLSchema简介及使用原因
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
- Python程序设计入门(5)类的使用简介
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- MongoDB入门教程二[MongoDB Shell 简介与使用]
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- 【原创翻译】COM入门简介 -- 什么是COM , 怎样使用它 (3)
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- 使用XStream是实现XML与Java对象的转换(1)--简介及入门示例
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)