目 录CONTENT

文章目录

golang使用logrus日志记录,捕风追影利器

Administrator
2025-09-02 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

 

字数 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. 1. Panic:记录日志,然后panic。

  2. 2. Fatal:致命错误,出现错误时程序无法正常运转。输出日志后,程序退出;

  3. 3. Error:错误日志,需要查看原因;

  4. 4. Warn:警告信息,提醒程序员注意;

  5. 5. Info:关键操作,核心流程的日志;

  6. 6. Debug:一般程序中输出的调试信息;

  7. 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. 1. 全局共享:logrus 的 Debug()、Info() 等方法内部操作的是同一个全局 Logger 对象(可以通过 logrus.StandardLogger() 访问)。你不需要显式传递或创建新的日志器实例。

  2. 2. 配置持久性:配置(如格式化器、级别)是设置在全局实例上的,这些设置在应用程序运行期间保持有效,直到被重新配置。

  3. 3. 包级导入:在其他文件中导入 "github.com/sirupsen/logrus" 后,直接调用其方法就会使用全局实例,无需额外初始化。

备注:logrus 库的全局 Logger 实例本身是小写的(包内私有),无法直接从外部包访问它。但库提供了导出的方法,如 logrus.Debug()(大写开头),这些方法内部操作全局实例,允许在任何地方使用。

引用链接

[1] sirupsen/logrus: Structured, pluggable logging for Go.: https://github.com/sirupsen/logrus

 

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区