Golang 库 - 日志库 logrus
<h2>前言</h2>
<blockquote>
我正在学习酷酷的 Golang,可点此查看帖子Golang学习笔记汇总。 logrus,结构化的日志处理器。 名字来源于吉祥物海象,walrus。介绍中的各种示例都是以海象来展现。 golang 标准库的日志框架非常简单,仅仅提供了print, panic 和 fatal三个函数。对于更精细的日志级别、日志文件分割以及日志分发等方面并没有提供支持. 所以催生了很多第三方的日志库,但是在golang的世界里,没有一个日志库像slf4j那样在Java中具有绝对统治地位.golang中,流行的日志框架包括logrus、zap、zerolog、seelog等. logrus 是目前 Github 上 star 数量最多的日志库,目前(2018.12,下同)star数量为8119,fork数为1031. logrus功能强大,性能高效,而且具有高度灵活性,提供了自定义插件的功能.很多开源项目,如docker,prometheus,dejavuzhou/ginbro等,都是用了logrus来记录其日志. 官方自己宣传的最大亮点是 结构化。 完全兼容golang标准库日志模块:logrus拥有六种日志级别:debug、info、warn、error、fatal和panic,这是golang标准库日志模块的API的超集.如果您的项目使用标准库日志模块,完全可以以最低的代价迁移到logrus上. 可扩展的Hook机制:允许使用者通过hook的方式将日志分发到任意地方,如本地文件系统、标准输出、logstash、elasticsearch或者mq等,或者通过hook定义日志内容和格式等. 可选的日志输出格式:logrus内置了两种日志格式,JSONFormatter和TextFormatter,如果这两个格式不满足需求,可以自己动手实现接口Formatter,来定义自己的日志格式. Field机制:logrus鼓励通过 Field 机制进行精细化的、结构化的日志记录,而不是通过冗长的消息来记录日志. 一开始先玩个官方给出的基础示例。 这个 example 讲了一个去海边看海象的故事。 输出: 将日志格式从默认格式调整为 JSON 格式,同时继续保留去除时间戳的配置。 JSON 格式有个好处,可以方便地被其他日志管理系统解析,诸如 logstash、Splunk。 将日志级别调整到 WarnLevel: <code>log.Level = logrus.WarnLevel</code> 输出: 默认是 stderr,我们将其配置到了 stdout。 另外也可以输出到文件。 这样运行之后,源文件目录下多了个 logrus.log,日志输出到了里面。 logrus 不推荐使用冗长的消息来记录运行信息,它推荐使用 Fields 来进行精细化的、结构化的信息记录。 这应该是 logrus 的核心用法,所谓的结构化日志。 例如下面的记录日志的方式: 在 logrus 中不太提倡,鼓励使用以下方式替代之: 前面的WithFields API可以规范使用者按照其提倡的方式记录日志.但是WithFields依然是可选的,因为某些场景下,使用者确实只需要记录仪一条简单的消息. 通常,在一个应用中、或者应用的一部分中,都有一些固定的Field.比如在处理用户http请求时,上下文中,所有的日志都会有request_id和user_ip.为了避免每次记录日志都要使用log.WithFields(log.Fields{“request_id”: request_id, “user_ip”: user_ip}),我们可以创建一个logrus.Entry实例,为这个实例设置默认Fields,在上下文中使用这个logrus.Entry实例记录日志即可. 因为 log.WithFields() 返回的是一个 Entry,这个 Entry 还能调用方法。 hook 有很多用法,可以将日志做进一步的处理,比如不同目的地的分发,比如额外添加字段。 这里先试试将日志写入 syslog ,根据官方说明,操作如下代码: 运行过后,查看最新的系统日志,发现调试信息已经写入。 Logrus 最大的特色是结构化日志记录,可以携带field;另外结合 hook 可以实现非常灵活的日志分发和内容调整。 您可能感兴趣的文章:
到此这篇关于“Golang 库 - 日志库 logrus”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
golang 日志分析_每日一库之 logrus 日志使用教程
Go进阶45:Golang简洁的日志收集系统(替代ELKB)
使用 Go 记录日志
go语言之日志,按文件大小日期轮询rotatelogs
Golang 库 - 日志库 logrus
go 杂谈一
20 个有用的 Go 语言微服务开发框架
20 个好用的 Go 语言微服务开发框架
使用bin-log日志还原数据库的例子
go语言之日志,按日期轮询file-rotatelogs