GO语言日志切割 + 记录调用源

准备工作

日志记录对程序排查问题比较关键,记录下GO中日志选择,从以下出发点考虑:

  • 日志文件能自动切割,以免过大
  • 能记录从哪个文件哪行代码调用的,方便排查问题
  • 配置简单明了
  • 库文件使用人数较多,稳定

经过一段时间摸索,最终选择了Logruslumberjack两个库,使用人数都比较多。

安装两个库

go get gopkg.in/natefinch/lumberjack.v2
go get github.com/sirupsen/logrus

代码

实际中一行配置就可以完成,后续只用调用logrus.Debuglogrus.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语言日志切割 + 记录调用源_第1张图片

你可能感兴趣的:(golang,开发语言,后端)