go seelog 初级使用
直接上代码,撸起来
1.目录结构
2.配置文件seelog.xml
<seelog levels="trace,debug,info,warn,error,critical">
<outputs formatid="main">
<!-- 对控制台输出的Log按级别分别用颜色显示。6种日志级别我仅分了三组颜色,如果想每个级别都用不同颜色则需要简单修改即可 -->
<filter levels="trace,debug,info">
<console formatid="colored-default"/>
<!-- 将日志输出到磁盘文件,按文件大小进行切割日志,单个文件最大10M,最多99个日志文件 -->
<rollingfile formatid="main" type="size" filename="./log/Preliminary/info.log" maxsize="10485760"
maxrolls="99"/>
</filter>
<filter levels="warn">
<console formatid="colored-warn"/>
<!-- 将日志输出到磁盘文件,按文件大小进行切割日志,单个文件最大10M,最多99个日志文件 -->
<rollingfile formatid="main" type="size" filename="./log/Intermediate/warn.log" maxsize="10485760"
maxrolls="99"/>
</filter>
<filter levels="error,critical">
<console formatid="colored-error"/>
<!-- 将日志输出到磁盘文件,按文件大小进行切割日志,单个文件最大10M,最多99个日志文件 -->
<rollingfile formatid="main" type="size" filename="./log/highLevel/error.log" maxsize="10485760"
maxrolls="99"/>
</filter>
</outputs>
<formats>
<format id="colored-default" format="%Date %Time [%LEV] [%File:%Line] [%Func] %Msg%n" />
<format id="colored-warn" format="%Date %Time [%LEV] [%File:%Line] [%Func] %Msg%n" />
<format id="colored-error" format="%Date %Time [%LEV] [%File:%Line] [%Func] %Msg%n" />
<format id="main" format="%UTCDate %UTCTime - [%LEV] - %RelFile - %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
3.mian程序
package main
import (
"fmt"
"github.com/cihub/seelog"
"os"
"path"
"path/filepath"
"time"
)
func main() {
defer seelog.Flush()
num := 0
for {
time.Sleep(time.Second*1)
num++
seelog.Info("日志消息",num)
seelog.Error("错误消息",num)
seelog.Warn("报警消息",num)
}
}
//初始化,init()函数会在每个包完成初始化后自动执行,并且执行优先级比main函数高
func init() {
SetupLogger()
}
//日志设置
func SetupLogger() {
defer func() {
seelog.Flush()
}()
baseDir, err := filepath.Abs(filepath.Dir(os.Args[0]))//获取程序路径
CurrentDir := baseDir
logger, err := seelog.LoggerFromConfigAsFile(path.Join(CurrentDir, "seelog.xml"))//读取配置,创建记录器
if err != nil {
fmt.Println(err)
return
}
if err != nil {
panic("日志配置文件读取错误")
}
seelog.ReplaceLogger(logger)
}
4.运行结果
2021-10-12 18:42:10 [INF] [main.go:22] [main.main] 日志消息1
2021-10-12 18:42:10 [ERR] [main.go:23] [main.main] 错误消息1
2021-10-12 18:42:10 [WRN] [main.go:23] [main.main] 报警消息1
2021-10-12 18:42:11 [INF] [main.go:22] [main.main] 日志消息2
2021-10-12 18:42:11 [ERR] [main.go:23] [main.main] 错误消息2
2021-10-12 18:42:11 [WRN] [main.go:23] [main.main] 报警消息2
2021-10-12 18:42:12 [INF] [main.go:22] [main.main] 日志消息3
2021-10-12 18:42:12 [ERR] [main.go:23] [main.main] 错误消息3
2021-10-12 18:42:12 [WRN] [main.go:23] [main.main] 报警消息3
5.日志文件内容
warn.log
2021-10-12 10:42:10 - [WRN] - src/main/main.go - 报警消息1
2021-10-12 10:42:11 - [WRN] - src/main/main.go - 报警消息2
2021-10-12 10:42:12 - [WRN] - src/main/main.go - 报警消息3
2021-10-12 10:42:13 - [WRN] - src/main/main.go - 报警消息4
2021-10-12 10:42:14 - [WRN] - src/main/main.go - 报警消息5
info.log
2021-10-12 10:42:10 - [INF] - src/main/main.go - 日志消息1
2021-10-12 10:42:11 - [INF] - src/main/main.go - 日志消息2
2021-10-12 10:42:12 - [INF] - src/main/main.go - 日志消息3
2021-10-12 10:42:13 - [INF] - src/main/main.go - 日志消息4
2021-10-12 10:42:14 - [INF] - src/main/main.go - 日志消息5
error.log
2021-10-12 10:42:10 - [ERR] - src/main/main.go - 错误消息1
2021-10-12 10:42:11 - [ERR] - src/main/main.go - 错误消息2
2021-10-12 10:42:12 - [ERR] - src/main/main.go - 错误消息3
2021-10-12 10:42:13 - [ERR] - src/main/main.go - 错误消息4
2021-10-12 10:42:14 - [ERR] - src/main/main.go - 错误消息5