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): 启用该选项后,日志会记录产生日志的函数和文件位置。需要注意的是,这会增加一定的性能开销。1logrus.SetReportCaller(true) -
logrus.SetNoLock(): 禁用日志记录时的锁,这在高并发环境中使用。需要确保你的代码中不会出现并发写日志的情况,否则可能会出现日志混乱的问题。1logrus.SetNoLock()
总结
logrus 提供了丰富的配置选项来满足各种日志需求。常用的配置包括设置日志级别、选择日志格式、指定日志输出目标以及添加钩子和自定义字段。合理利用这些参数,可以使你的日志系统更加灵活和高效。