七叶笔记 » golang编程 » Go语言日志处理

Go语言日志处理

今天在一个小项目里要写日志,找到两个好用的包来辅助记录日志.

包一: github.com/sirupsen/logrus

特性:

  • 完全兼容golang标准库日志模块:logrus拥有六种日志级别:debug、info、warn、error、fatal和panic,这是golang标准库日志模块的API的超集。如果您的项目使用标准库日志模块,完全可以以最低的代价迁移到logrus上。
  • 可扩展的Hook机制:允许使用者通过hook的方式将日志分发到任意地方,如本地文件系统、标准输出、logstash、elasticsearch或者mq等,或者通过hook定义日志内容和格式等。
  • 可选的日志输出格式:logrus内置了两种日志格式,JSONFormatter和TextFormatter,如果这两个格式不满足需求,可以自己动手实现接口Formatter,来定义自己的日志格式。
  • Field机制:logrus鼓励通过Field机制进行精细化的、结构化的日志记录,而不是通过冗长的消息来记录日志。
  • logrus是一个可插拔的、结构化的日志框架。

包二: github.com/lestrrat-go/file-rotatelogs

主要用来保存每天一个日志,并且将设定时间之前的日志清空, 使之不会不停涨大

主要使用代码:

 import (
...
  rotatelogs "github.com/lestrrat-go/file-rotatelogs"
log "github.com/sirupsen/logrus"
)

func initLogger() {
path := "c:/myapp/log"
/* 日志轮转相关函数
`WithLinkName` 为最新的日志建立软连接
`WithRotationTime` 设置日志分割的时间,隔多久分割一次
WithMaxAge 和 WithRotationCount二者只能设置一个
 `WithMaxAge` 设置文件清理前的最长保存时间
 `WithRotationCount` 设置文件清理前最多保存的个数
*/// 下面配置日志每隔 1 天轮转一个新文件,保留最近 7天的日志文件,多余的自动清理掉。
writer, _ := rotatelogs.New(
path+".%Y%m%d%H%M.json",
rotatelogs.WithLinkName(path),
rotatelogs.WithMaxAge(time.Duration(24*7)*time.Hour),
rotatelogs.WithRotationTime(time.Duration(24)*time.Hour),
)
log.SetLevel(log.DebugLevel)  //设置输出日志级别
log.SetOutput(writer)    //定制输出文件
log.SetFormatter(&log.JSONFormatter{})  //设置输出格式为JSON
}

func main(){
  
  initLogger();
  
  //带字段精细输出
  log.WithFields(log.Fields{
"要监听的端口":     ConfigPort,
}).Info("服务启动中")
  

//实际使用
  log.Warnf("警告:%s","内容内容内容")
}  

相关文章