字数 755,阅读大约需 4 分钟
golang使用logrus日志记录,捕风追影利器
logrus日志包
logrus
完全兼容标准的log
库,还支持文本、JSON 两种日志输出格式。很多知名的开源项目都使用了这个库.
现在logrus主要是在维护期,应该不会有V2版本了,大量项目使用到了这个日志包,因此开发者主要是fix bug阶段。
对于我们,可直接在代码仓库里使用lugrus,进行日志输出维护。
package main
import "github.com/sirupsen/logrus"
func main() {
logrus.WithFields(logrus.Fields{
"animal": "walrus",
}).Info("A walrus appears")
}
使用教程
sirupsen/logrus: Structured, pluggable logging for Go.[1]
实际效果
日志级别
logrus的使用非常简单,与标准库log类似。logrus支持更多的日志级别:
1. Panic:记录日志,然后panic。
2. Fatal:致命错误,出现错误时程序无法正常运转。输出日志后,程序退出;
3. Error:错误日志,需要查看原因;
4. Warn:警告信息,提醒程序员注意;
5. Info:关键操作,核心流程的日志;
6. Debug:一般程序中输出的调试信息;
7. Trace:很细粒度的信息,一般用不到;
安装
$ go get github.com/sirupsen/logrus
编程
func Setup() {
formatter := new(prefixed.TextFormatter)
formatter.DisableTimestamp = false
formatter.DisableColors = false
formatter.ForceColors = true
formatter.ForceFormatting = true
formatter.FullTimestamp = true
formatter.CallerFormatter = CustomCallerFormatter
formatter.TimestampFormat = "2006-01-02 15:04:05.000"
formatter.SetColorScheme(&prefixed.ColorScheme{
TimestampStyle: "cyan",
CallerStyle: "cyan",
PrefixStyle: "green",
})
logrus.SetFormatter(formatter)
logrus.SetReportCaller(true)
logrus.SetOutput(os.Stdout)
level := strings.ToLower(setting.AppSetting.LogLevel)
switch level {
case "debug":
logrus.SetLevel(logrus.DebugLevel)
case "info":
logrus.SetLevel(logrus.InfoLevel)
case "warn":
logrus.SetLevel(logrus.WarnLevel)
case "error":
logrus.SetLevel(logrus.ErrorLevel)
default:
logrus.SetLevel(logrus.DebugLevel)
}
}
在Go语言中,logrus 是一个全局日志库,它维护一个默认的全局 Logger 实例。这个全局实例是单例模式的实现,意味着整个应用程序中只有一个共享的日志器对象。通过在 pkg/logging/logger.go 的 Setup() 函数中对这个全局实例进行配置(如设置格式化器、日志级别、输出目标等)
func main() {
cmd := exec.Command("swag", "init")
cmd.Run()
logrus.Debug("初始化API文档成功")
}
一旦 Setup() 被调用并完成配置,后续在代码的任何地方(如其他包或文件中)直接使用 logrus.Debug("初始化API文档成功") 时,logrus 会自动使用这个已经配置好的全局实例。这是因为:
1. 全局共享:logrus 的 Debug()、Info() 等方法内部操作的是同一个全局 Logger 对象(可以通过 logrus.StandardLogger() 访问)。你不需要显式传递或创建新的日志器实例。
2. 配置持久性:配置(如格式化器、级别)是设置在全局实例上的,这些设置在应用程序运行期间保持有效,直到被重新配置。
3. 包级导入:在其他文件中导入 "github.com/sirupsen/logrus" 后,直接调用其方法就会使用全局实例,无需额外初始化。
备注:logrus 库的全局 Logger 实例本身是小写的(包内私有),无法直接从外部包访问它。但库提供了导出的方法,如 logrus.Debug()(大写开头),这些方法内部操作全局实例,允许在任何地方使用。
引用链接
[1]
sirupsen/logrus: Structured, pluggable logging for Go.: https://github.com/sirupsen/logrus
评论区