这个项目能做什么

Logrus 是 Go 的结构化日志库,设计上与标准库 logger 的 API 兼容。项目目前处于维护模式:重点放在安全性、缺陷修复和性能改进上,新功能仅限于互操作性工作,例如 Go 的 log/slog。README 指出,如今通过 Zerolog、Zap 和 Apex 等替代方案,Go 中已广泛支持结构化日志。 核心能力: - 分级日志,共七个级别:Trace、Debug、Info、Warning、Error、Fatal 和 Panic。可以配置 logger 仅输出等于或高于所选严重级别的条目。 - 通过 WithField 和 WithFields 提供结构化字段,鼓励使用可发现的键值日志,而不是冗长的格式化消息。条目会自动包含 time、msg 和 level。 - 默认字段:WithFields 返回一个 logrus.Entry,可复用以在多个日志语句中附加常见字段,例如 request_id 或 user_ip。 - 格式化器:内置 TextFormatter(当输出为 TTY 时带颜色编码,否则为兼容 logfmt 的纯文本)和 JSONFormatter,供 Logstash 或 Splunk 等工具进行机器解析。选项包括 ForceColors、DisableColors、DisableLevelTruncation、PadLevelText 和 FullTimestamp。自定义格式化器需实现 Formatter 接口。 - 钩子:将行为附加到日志级别,例如将错误发送到异常跟踪器、转发到 StatsD 或写入 syslog。已有内置钩子,第三方钩子列在项目 wiki 中。 - 调用方报告:SetReportCaller(true) 会将调用方法添加为字段,README 中注明了可测量的开销。 - io.Writer 集成:logger.Writer() 将 logger 暴露为 io.Writer,允许标准库日志输出通过 Logrus 格式化器和钩子进行重定向。 - 测试支持:test hook 包提供 NewLocal、NewGlobal 和 NewNullLogger 辅助工具,用于在测试中断言日志消息。 - Fatal 处理器:RegisterExitHandler 注册在 fatal 级别消息触发 os.Exit(1) 之前执行的函数,适用于优雅关闭。 - 线程安全:Logger 默认受互斥锁保护;当钩子和输出本身已线程安全时,可用 SetNoLock() 禁用锁定。 日志轮转有意未包含在内;README 建议使用 logrotate 等外部工具。该库没有内置的环境概念,因此按环境选择格式化器和钩子由应用程序自行决定。