- Created by 郭强, last modified by 海亮 on Mar 14, 2023
日志级别
日志级别用于管理日志的输出,我们可以通过设定特定的日志级别来关闭/开启特定的日志内容。 日志级别的设置可以通过两个方法实现:
func (l *Logger) SetLevel(level int) func (l *Logger) SetLevelStr(levelStr string) error func (l *Logger) SetLevelPrint(enabled bool)
SetLevel
方法
通过SetLevel
方法可以设置日志级别,glog
模块支持以下几种日志级别常量设定:
LEVEL_ALL LEVEL_DEV LEVEL_PROD LEVEL_DEBU LEVEL_INFO LEVEL_NOTI LEVEL_WARN 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
日志内容。
当然日志模块还有其他的一些级别,如CRIT/PANI/FATA
,但是这几个级别是非常严重的错误,无法在日志级别中由开发者自定义屏蔽。例如产生严重错误的时候,PANI/FATA
错误界别将会产生一些额外的系统动作:panic
/exit
。
使用示例:
package main import ( "context" "github.com/gogf/gf/v2/os/glog" ) func main() { ctx := context.TODO() l := glog.New() l.Info(ctx, "info1") l.SetLevel(glog.LEVEL_ALL ^ glog.LEVEL_INFO) l.Info(ctx, "info2") }
执行后,输出结果为:
2021-12-31 11:16:57.272 [INFO] info1
SetLevelStr
方法
大部分场景下我们可以通过SetLevelStr
方法来通过字符串设置日志级别,配置文件中的level
配置项也是通过字符串来配置日志级别。支持的日志级别字符串如下,不区分大小写:
"ALL": LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT, "DEV": LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT, "DEVELOP": LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT, "PROD": LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT, "PRODUCT": LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT, "DEBU": LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT, "DEBUG": LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT, "INFO": LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT, "NOTI": LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT, "NOTICE": LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT, "WARN": LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT, "WARNING": LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT, "ERRO": LEVEL_ERRO | LEVEL_CRIT, "ERROR": LEVEL_ERRO | LEVEL_CRIT, "CRIT": LEVEL_CRIT, "CRITICAL": LEVEL_CRIT,
可以看到,通过级别名称设置的日志级别是按照日志级别的高低来进行过滤的:DEBU < INFO < NOTI < WARN < ERRO < CRIT
,也支持ALL
, DEV
, PROD
常见部署模式配置名称。
使用示例:
package main import ( "context" "github.com/gogf/gf/v2/os/glog" ) func main() { ctx := context.TODO() l := glog.New() l.Info(ctx, "info1") l.SetLevelStr("notice") l.Info(ctx, "info2") }
执行后,输出结果为:
2021-12-31 11:20:15.019 [INFO] info1
SetLevelPrint
方法
控制默认日志输出是否打印日志级别标识,默认会打印日志级别标识。
使用示例:
package main import ( "context" "github.com/gogf/gf/v2/os/glog" ) func main() { ctx := context.TODO() l := glog.New() l.Info(ctx, "info1") l.SetLevelPrint(false) l.Info(ctx, "info2") }
执行后,输出结果为:
2023-03-14 10:28:18.598 [INFO] info1 2023-03-14 10:28:18.631 info1
级别名称
在日志中我们会看到不同级别的打印内容,会在内容前面带有不同的日志级别名称。默认的日志级别名称如下:
LEVEL_DEBU: "DEBU", LEVEL_INFO: "INFO", LEVEL_NOTI: "NOTI", LEVEL_WARN: "WARN", LEVEL_ERRO: "ERRO", LEVEL_CRIT: "CRIT", LEVEL_PANI: "PANI", LEVEL_FATA: "FATA",
为方便统一日志格式,保证比较优雅的排版风格,因此日志级别的名称都使用了级别英文单词的前四个字符。若有特殊需求需要修改日志级别名称的,可以通过以下方法进行设置:
func (l *Logger) SetLevelPrefix(level int, prefix string) func (l *Logger) SetLevelPrefixes(prefixes map[int]string)
使用示例:
package main import ( "context" "github.com/gogf/gf/v2/os/glog" ) func main() { ctx := context.TODO() l := glog.New() l.SetLevelPrefix(glog.LEVEL_DEBU, "debug") l.Debug(ctx, "test") }
执行后,终端输出:
2021-12-31 11:21:45.754 [debug] test
- No labels