日志级别

日志级别用于管理日志的输出,我们可以通过设定特定的日志级别来关闭/开启特定的日志内容。 日志级别的设置可以通过两个方法实现:

  1. func (l *Logger) SetLevel(level int)
  2. func (l *Logger) SetLevelStr(levelStr string) error
  3. func (l *Logger) SetLevelPrint(enabled bool)

SetLevel 方法

通过 SetLevel 方法可以设置日志级别, glog 模块支持以下几种日志级别常量设定:

  1. LEVEL_ALL
  2. LEVEL_DEV
  3. LEVEL_PROD
  4. LEVEL_DEBU
  5. LEVEL_INFO
  6. LEVEL_NOTI
  7. LEVEL_WARN
  8. LEVEL_ERRO

我们可以通过 位操作 组合使用这几种级别,例如其中 LEVEL_ALL 等价于 LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT。我们还可以通过 LEVEL_ALL & ^LEVEL_DEBU & ^LEVEL_INFO & ^LEVEL_NOTI 来过滤掉 LEVEL_DEBU/LEVEL_INFO/LEVEL_NOTI 日志内容。

日志组件-日志级别 - 图1注意

当然日志模块还有其他的一些级别,如 CRIT/PANI/FATA,但是这几个级别是非常严重的错误,无法在日志级别中由开发者自定义屏蔽。例如产生严重错误的时候, PANI/FATA 错误界别将会产生一些额外的系统动作: panic/ exit

使用示例:

  1. package main
  2. import (
  3. "context"
  4. "github.com/gogf/gf/v2/os/glog"
  5. )
  6. func main() {
  7. ctx := context.TODO()
  8. l := glog.New()
  9. l.Info(ctx, "info1")
  10. l.SetLevel(glog.LEVEL_ALL ^ glog.LEVEL_INFO)
  11. l.Info(ctx, "info2")
  12. }

执行后,输出结果为:

  1. 2021-12-31 11:16:57.272 [INFO] info1

SetLevelStr 方法

大部分场景下我们可以通过 SetLevelStr 方法来通过字符串设置日志级别,配置文件中的 level 配置项也是通过字符串来配置日志级别。支持的日志级别字符串如下,不区分大小写:

  1. "ALL": LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT,
  2. "DEV": LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT,
  3. "DEVELOP": LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT,
  4. "PROD": LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT,
  5. "PRODUCT": LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT,
  6. "DEBU": LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT,
  7. "DEBUG": LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT,
  8. "INFO": LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT,
  9. "NOTI": LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT,
  10. "NOTICE": LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT,
  11. "WARN": LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT,
  12. "WARNING": LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT,
  13. "ERRO": LEVEL_ERRO | LEVEL_CRIT,
  14. "ERROR": LEVEL_ERRO | LEVEL_CRIT,
  15. "CRIT": LEVEL_CRIT,
  16. "CRITICAL": LEVEL_CRIT,

可以看到,通过级别名称设置的日志级别是按照日志级别的高低来进行过滤的: DEBU < INFO < NOTI < WARN < ERRO < CRIT,也支持 ALL, DEV, PROD 常见部署模式配置名称。

使用示例:

  1. package main
  2. import (
  3. "context"
  4. "github.com/gogf/gf/v2/os/glog"
  5. )
  6. func main() {
  7. ctx := context.TODO()
  8. l := glog.New()
  9. l.Info(ctx, "info1")
  10. l.SetLevelStr("notice")
  11. l.Info(ctx, "info2")
  12. }

执行后,输出结果为:

  1. 2021-12-31 11:20:15.019 [INFO] info1

SetLevelPrint 方法

控制默认日志输出是否打印日志级别标识,默认会打印日志级别标识。

使用示例:

  1. package main
  2. import (
  3. "context"
  4. "github.com/gogf/gf/v2/os/glog"
  5. )
  6. func main() {
  7. ctx := context.TODO()
  8. l := glog.New()
  9. l.Info(ctx, "info1")
  10. l.SetLevelPrint(false)
  11. l.Info(ctx, "info2")
  12. }

执行后,输出结果为:

  1. 2023-03-14 10:28:18.598 [INFO] info1
  2. 2023-03-14 10:28:18.631 info1

级别名称

在日志中我们会看到不同级别的打印内容,会在内容前面带有不同的日志级别名称。默认的日志级别名称如下:

  1. LEVEL_DEBU: "DEBU",
  2. LEVEL_INFO: "INFO",
  3. LEVEL_NOTI: "NOTI",
  4. LEVEL_WARN: "WARN",
  5. LEVEL_ERRO: "ERRO",
  6. LEVEL_CRIT: "CRIT",
  7. LEVEL_PANI: "PANI",
  8. LEVEL_FATA: "FATA",

为方便统一日志格式,保证比较优雅的排版风格,因此日志级别的名称都使用了级别英文单词的前四个字符。若有特殊需求需要修改日志级别名称的,可以通过以下方法进行设置:

  1. func (l *Logger) SetLevelPrefix(level int, prefix string)
  2. func (l *Logger) SetLevelPrefixes(prefixes map[int]string)

使用示例:

  1. package main
  2. import (
  3. "context"
  4. "github.com/gogf/gf/v2/os/glog"
  5. )
  6. func main() {
  7. ctx := context.TODO()
  8. l := glog.New()
  9. l.SetLevelPrefix(glog.LEVEL_DEBU, "debug")
  10. l.Debug(ctx, "test")
  11. }

执行后,终端输出:

  1. 2021-12-31 11:21:45.754 [debug] test