主页

索引

模块索引

搜索页面

3.4.4. 日志

logrus

logrus 的作者观点一样,”核心不是性能”:

printf 类型字符串格式化的日志格式,不再推荐
现在日志的消费,逐渐从人转向了计算机,结构化的数据和友好的解析方式更重要
  • logrus功能强大,性能高效,而且具有高度灵活性,提供了自定义插件的功能

  • 很多开源项目,如docker,prometheus等,都是用了logrus来记录其日志

  • github: https://github.com/sirupsen/logrus

    logrus是目前Github上star数量最多的日志库
    star数量: 8.1k(201808) -> 13.4k(20191024) -> 16.3k(20201027)
    fork数: 1031(201808) -> 1.5k -> 1.8k
    开源协议: MIT
    

设置打印格式:

logrus自带两种方式的输出格式: 纯文本和JSON格式的
&logrus.JSONFormatter
&logrus.TextFormatter
// 使用
log := logrus.New()
log.SetFormatter(formatter)

设置日志级别:

// 使用
log := logrus.New()
log.SetLevel(level)

// 日志级别
var levels = map[string]logrus.Level{
  "panic": logrus.PanicLevel,
  "fatal": logrus.FatalLevel,
  "error": logrus.ErrorLevel,
  "warn":  defaultLevel,
  "info":  logrus.InfoLevel,
  "debug": logrus.DebugLevel,
}

设置打印函数、文件、行号:

&logrus.JSONFormatter{
  CallerPrettyfier: func(f *runtime.Frame) (string, string) {
    filename := path.Base(f.File)
    return f.Function, fmt.Sprintf("%s:%d", filename, f.Line)
  },
}
&logrus.TextFormatter{
    CallerPrettyfier: func(f *runtime.Frame) (string, string) {
      filename := path.Base(f.File)
      return f.Function, fmt.Sprintf("%s:%d", filename, f.Line)
    },
}

其他

  • zap是Uber推出的一个快速、结构化的分级日志库 https://github.com/uber-go/zap:

    具有强大的ad-hoc分析功能,并且具有灵活的仪表盘
    star数量: 4.3k(201808) -> 8.6k(20191024)  -> 11k(20201027)
    开源协议: MIT
    
  • seelog提供了灵活的异步调度、格式化和过滤功能:

  • zerolog: https://github.com/rs/zerolog

主页

索引

模块索引

搜索页面