简介


Logrus 是Go结构化日志记录器,与标准库log的API兼容

如何使用


  1. import log "github.com/sirupsen/logrus"

上面代码添加log别名,便于后面使用

  1. func main() {
  2. defer func() {
  3. if err := recover(); err != nil {
  4. log.Error(err)
  5. }
  6. }()
  7. log.Info("info log")
  8. log.Debug("debug log")
  9. log.Error("error log")
  10. log.Panic("panic log") // after execute panic function
  11. }

执行上面代码,可以看到Debug日志未打印到屏幕上,这是因为logrus默认打印的日志级别是Info,该级别以下的日志不会打印,可以通过logrus.SetLevel()设置日志级别,下面👇🏻是logrus日志级别源码片段,可以参考进行设置。
image.png

  1. // 设置DebugLevel可打印Debug及以上日志
  2. // 设置ErrorLevel可打印Error及以上日志
  3. // 以此类推
  4. log.SetLevel(log.DebugLevel)
  1. // 设置Text格式输出(默认)
  2. log.SetFormatter(&log.TextFormatter{
  3. ForceColors: false, // 是否跳过TTY检查
  4. DisableColors: false, // 是否打印颜色
  5. FullTimestamp: true, // 是否显示完整时间
  6. TimestampFormat: "2006-01-02 15:04:05", // 日期格式化
  7. })
  8. // 设置JSON格式输出
  9. log.SetFormatter(&log.JSONFormatter{
  10. TimestampFormat: "2006-01-02 15:04:05", // 时间字段格式化
  11. DisableTimestamp: false, // 是否关闭时间字段
  12. DisableHTMLEscape: true, // 是否禁用html转义(一般禁用, 提高输出效率, 除非日志需要在html中展示)
  13. DataKey: "", //
  14. FieldMap: log.FieldMap{"time": "@time"}, // 自定义默认字段名称
  15. CallerPrettyfier: nil, // 设置修改字段内容的函数
  16. PrettyPrint: true, // 是否缩进展示JSON
  17. })
  18. // 看下效果
  19. log.Info("<html></html>")
  1. log.SetReportCaller(true)
  1. // 添加一个
  2. log.WithField("app_name", "tmp").Info("info log")
  3. // 添加多个
  4. log.WithFields(log.Fields{
  5. "app_name": "tmp",
  6. "request_id": "00000",
  7. }).Info("test log")
  1. log := logrus.New()

通过创建Logger实例并将它设置为全局变量,可以在封装框架时复用它

高级用法


Hook

可以通过设置钩子的方式来实现一些个性化配置,下面代码是使用官方提供的两个钩子示例

  1. TODO