logrus日志库学习笔记
logrus
是 Go 语言中一个非常流行和功能强大的日志库。它提供了丰富的功能,支持结构化日志、灵活的日志级别、钩子(hook)、格式化输出等特性,适合用来记录各种类型的日志信息。
logrus
的基本使用
以下是使用 logrus
的一些基本操作示例:
1. 安装 logrus
使用 go get
命令安装 logrus
:
|
|
2. 基本日志记录
logrus
支持不同级别的日志记录,如 Info
、Warn
、Error
、Debug
等。以下是一个简单的示例:
|
|
3. 设置日志级别
你可以设置全局的日志级别,低于该级别的日志将不会输出:
|
|
4. 格式化日志输出
logrus
支持多种日志输出格式,例如文本和 JSON:
- 文本格式(默认):
|
|
- JSON 格式:
|
|
5. 自定义字段
logrus
支持结构化日志,可以在日志中添加自定义字段:
|
|
6. 输出到文件
你可以将日志输出到文件,而不是标准输出:
|
|
1 2
// 将日志输出设置为同时写入文件和标准输出 logrus.SetOutput(io.MultiWriter(file, os.Stdout))
7. 钩子(Hooks)
logrus
支持钩子,可以在日志记录前后执行一些自定义操作,比如将日志发送到远程服务器:
|
|
常见场景使用
-
记录 HTTP 请求日志:可以使用
logrus
记录 HTTP 请求的相关信息,比如方法、路径、状态码等。 -
分环境日志输出:可以根据不同的环境(开发、测试、生产)配置不同的日志级别和输出格式。
-
集成第三方日志系统:通过钩子将日志发送到诸如 ELK、Splunk、Datadog 等日志系统进行集中管理和分析。
参数和选项配置
在使用 logrus
时,有多种参数和选项可以配置,以满足不同的日志记录需求。这些设置涵盖了日志格式、日志级别、输出目标等多个方面。
1. 日志级别(Log Level)
你可以设置 logrus
的全局日志级别,只有等于或高于该级别的日志才会输出:
|
|
常用的日志级别有(依次降低):
logrus.PanicLevel
:记录 Panic 日志并触发panic
。logrus.FatalLevel
:记录 Fatal 日志并调用os.Exit(1)
退出程序。logrus.ErrorLevel
:记录错误日志。logrus.WarnLevel
:记录警告日志。logrus.InfoLevel
:记录信息性日志。logrus.DebugLevel
:记录调试日志。logrus.TraceLevel
:记录更细粒度的调试日志。
logrus
默认的日志级别是 InfoLevel
。这意味着在默认情况下,logrus
会记录 Info
级别及更高(Warn
、Error
、Fatal
、Panic
)的日志,而不会输出低于 InfoLevel
的日志(如 Debug
和 Trace
级别的日志)。
2. 日志格式(Formatter)
logrus
支持不同的日志格式,可以通过 SetFormatter
方法来设置。
2.1 文本格式(TextFormatter)
这是 logrus
的默认格式器,适合人类阅读。
|
|
TextFormatter
的常用参数:
DisableColors
: 禁用输出的颜色(默认为false
)。FullTimestamp
: 启用完整时间戳(默认为false
,即只显示时间)。TimestampFormat
: 自定义时间戳格式,默认是time.RFC3339
。DisableTimestamp
: 禁用时间戳输出。ForceQuote
: 强制对字段进行引用。
2.2 JSON 格式(JSONFormatter)
适合机器处理或日志收集系统使用。
|
|
JSONFormatter
的常用参数:
TimestampFormat
: 自定义时间戳格式。PrettyPrint
: 美化输出的 JSON,便于调试(默认为false
)。DisableHTMLEscape
: 禁用 HTML 字符转义。
3. 输出目标(Output)
默认情况下,logrus
将日志输出到标准输出(os.Stdout
),你可以使用 SetOutput
方法改变输出目标,如输出到文件或其他日志处理器。
|
|
4. 钩子(Hooks)
logrus
支持钩子机制,可以在日志事件发生前或发生后执行特定的操作。你可以使用钩子来将日志发送到外部服务,如 Logstash、Sentry 等。
|
|
5. 字段(Fields)
logrus
支持结构化日志,可以在日志中添加自定义字段,使用 WithFields
方法:
|
|
6. 其他配置
-
logrus.SetReportCaller(true)
: 启用该选项后,日志会记录产生日志的函数和文件位置。需要注意的是,这会增加一定的性能开销。1
logrus.SetReportCaller(true)
-
logrus.SetNoLock()
: 禁用日志记录时的锁,这在高并发环境中使用。需要确保你的代码中不会出现并发写日志的情况,否则可能会出现日志混乱的问题。1
logrus.SetNoLock()
总结
logrus
提供了丰富的配置选项来满足各种日志需求。常用的配置包括设置日志级别、选择日志格式、指定日志输出目标以及添加钩子和自定义字段。合理利用这些参数,可以使你的日志系统更加灵活和高效。