Go的日志分级处理

背景

吐槽几句,前几天好不容易把粘包和消息拼接写完了,然后某天收到邮件说目前没有分包的情况,此时我的内心是……&¥%#@,恩,日了狗🐶。吐槽完了,因为第一次独立完成项目,很多地方并不是很清楚,比如日志分级和错误处理,对于错误处理,暂时不需要做特殊的处理,因此这里暂且略过,周五的时候做了一下日志分级,这里做个总结。

关于日志的分级

日志具体分级,要看我们具体使用的插件,不同的插件对于日志有不同的分级,但通常不外乎以下几种:

  • Debug:通常我们的程序中会有Debug开关,Debug模式通常都是Developer开发的时候调试程序时候输出的一些辅助信息,对于后期排查错误也很有帮助。
  • Info:info信息中通常会有一些程序启动的信息项,比如”connection success…”等等,强调程序运行的过程。
  • Warn:warn表明可能会出现潜在错误的情况。
  • Error:error表示虽然发生错误,但不影响系统继续运行。
  • Fatal:指每个严重的错误事件将会导致进程的退出(相当于os.Exit(1))。
  • Panic:每个严重的错误将会导致程序退出(相当于panic())。

处理方案

关于日志分级,一般情况下我们都是设置一个bool类型的debug,作为flag在启动时读入,或者配置到config文件中,但有时候根据情况,我们还可以把它定义为string类型,根据启动时读入的参数来判定具体输出什么level及以上的日志,这些就根据代码和实际情况去写了。

这里举个简单的例子,如果我们把debug配置成了bool类型的参数,那么启动命令大概是这样的:

1
go run main.go --debug

如果把debug参数配置成了string类型的参数,那么启动命令大概是这样的:

1
go run main.go --debug="Warn"

然后在main.go中大概是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
if debug == "Debug" {
log.Level = logrus.DebugLevel
} else if debug == "Info" {
log.Level = logrus.InfoLevel
} else if debug == "Warn" {
log.Level = logrus.WarnLevel
} else if debug == "Error" {
log.Level = logrus.ErrorLevel
} else if debug == "Fatal" {
log.Level = logrus.FatalLevel
} else if debug == "Panic" {
log.Level = logrus.PanicLevel
}

以上代码使用了logrus这个日志插件

吐槽+总结

难得周末一天还写了点东西出来,撒花~(≧▽≦)/~为自己点个赞,明天又是周一啦,新的一周~下周开始做协议解析!加油~Fighting~