高性能日志框架:seelog,使用的好,可以提升很多开发效率,有时候做大型高并发的时候,我们需要用日志去检查很多问题,那么接下来介绍一个非常简单的小案例。
seelog 大牛的 github 链接如下:
github : https://github.com/cihub/seelog
文件目录 配置文件
我改动后如下:将日志输出到磁盘文件,按文件大小进行切割日志,单个文件最大10M,最多99个日志文件,主要是我考虑到文件太大也不好传输的问题,所以更改了配置文件
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="%EscM(38)%Date %Time [%LEV] %File:%Line | %Msg%n%EscM(0)"/>
<format id="colored-warn" format="%EscM(33)%Date %Time [%LEV] %File:%Line | %Msg%n%EscM(0)"/>
<format id="colored-error" format="%EscM(31)%Date %Time [%LEV] %File:%Line | %Msg%n%EscM(0)"/>
<format id="main" format="%Date %Time [%LEV] %File:%Line | %Msg%n"/>
</formats>
</seelog>
代码
SeelogHelp.go
/*
@Time : 2021/7/13 11:58
@Author : dao
@File : SeelogHelp
@Software: GoLand
*/
package help
import "github.com/cihub/seelog"
func SetupLogger() {
logger, err := seelog.LoggerFromConfigAsFile("seelog.xml")
if err != nil {
return
}
seelog.ReplaceLogger(logger)
}
main.go
/*
@Time : 2021/7/13 11:59
@Author : dao
@File : main
@Software: GoLand
*/
package main
import (
"TestGo/help"
"fmt"
"github.com/cihub/seelog"
"strconv"
)
/**
* @Description: 初始化
*/
func Init() {
help.SetupLogger()
}
/**
* @Description: 入口
*/
func main() {
Init()
defer seelog.Flush()
num := 0
for {
num++
seelog.Info(fmt.Sprintf("My Log Go! curr:%d", num))
sd, err := strconv.Atoi("we")
if err != nil {
seelog.Error(err)
continue
}
seelog.Info(sd)
}
}
效果: