日志级别

    通过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日志内容。

    当然glog模块还有其他的一些级别,如CRITFATA,但是这两个级别是非常严重的错误,无法由开发者自定义屏蔽,产生严重错误的时候。将会产生一些额外的系统动作,如panic/exit

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

    执行后,输出结果为:

    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,也支持, DEV, PROD常见部署模式配置名称。

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

    执行后,输出结果为:

    级别名称

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

    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. 2021-12-31 11:21:45.754 [debug] test