GO语言实现日志切割的示例详解
作者:LeoForBest
日志记录对程序排查问题比较关键,所以本文将选择Logrus和lumberjack两个库进行日志切割以及记录调用源,感兴趣的小伙伴可以了解一下
准备工作
日志记录对程序排查问题比较关键,记录下GO中日志选择,从以下出发点考虑:
- 日志文件能自动切割,以免过大
- 能记录从哪个文件哪行代码调用的,方便排查问题
- 配置简单明了
- 库文件使用人数较多,稳定
经过一段时间摸索,最终选择了Logrus和lumberjack两个库,使用人数都比较多。
安装两个库
go get gopkg.in/natefinch/lumberjack.v2 go get github.com/sirupsen/logrus
代码
实际中一行配置就可以完成,后续只用调用logrus.Debug、logrus.Info同标准库一样只用log改为logrus十分简单明了
logrus.SetOutput(io.MultiWriter(os.Stdout, &lumberjack.Logger{ Filename: "go-log.log", MaxBackups: 10, MaxSize: 20, }))
整体代码如下,基本能满足实际使用需求
个别需求调整可以参考这两个文档
package main import ( "io" "os" "time" "github.com/sirupsen/logrus" "gopkg.in/natefinch/lumberjack.v2" ) func main() { // 同时输出到终端和文件 logrus.SetOutput(io.MultiWriter(os.Stdout, &lumberjack.Logger{ Filename: "go-log.log", MaxBackups: 10, MaxSize: 20, })) /*只输出到文件的话只用以下写法 logrus.SetOutput(&lumberjack.Logger{ Filename: "go-log.log", MaxBackups: 10, MaxSize: 20, }) */ // 这个在日志中记录代码位置,十分有用 logrus.SetReportCaller(true) // 设置输出等级,按实际需求设置,可以忽略 logrus.SetLevel(logrus.InfoLevel) logrus.Debug("debug message") logrus.Infof("info message at %s\n", time.Now().Format("2006-01-02 15:04:05")) logrus.Error("error message") }
使用效果
logrus.SetReportCaller(true)
可以自动在日志当中记录代码调用位置,设置为false时候不开启
到此这篇关于GO语言实现日志切割的示例详解的文章就介绍到这了,更多相关GO日志切割内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!