Go 语言项目开发实战
孔令飞
腾讯云专家工程师,前 Red Hat、联想云工程师
41030 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 61 讲
Go 语言项目开发实战
15
15
1.0x
00:00/00:00
登录|注册

20 | 日志处理(上):如何设计日志包并记录日志?

Kibana
Elasticsearch
Logstash indexer
Shipper
日志记录
支持动态开关Debug日志
支持RequestID
结构化日志记录
集中化日志存储处理
总是将日志记录在本地文件
支持动态日志输出
打印日志要“不多不少”
根据排障的过程优化日志打印
不要将日志记录在错误的日志级别上
日志最好包含请求ID和用户行为
使用明确的类型
日志内容小写字母开头,以英文点号 . 结尾
在Debug级别记录临时日志
不要输出敏感信息
Fatal级别
Panic级别
Error级别
Warn级别
Info级别
Debug级别
在错误产生的最原始位置打印日志
在循环中打印日志要慎重
写操作必须打印日志
在分支语句处打印日志
日志参数控制
插件化能力
并发安全
高性能
支持输出到不同的位置
兼容标准库log包
支持颜色输出
具备Hook能力
支持日志轮转
支持结构化日志
能够按级别分类输出
支持多种日志格式
支持输出到标准输出和文件
支持自定义配置
支持不同的日志级别
支持基本的日志信息
课后练习
分布式日志解决方案
如何记录日志
设计日志包
EFK/ELK架构
记录日志的“最佳”实践总结
如何记录日志内容?
在哪个日志级别打印日志?
在何处打印日志?
设计日志包时需要关注的点
可选功能
高级功能
基础功能
总结
拓展内容:分布式日志解决方案(EFK/ELK)
如何记录日志?
设计日志包
如何设计日志包并记录日志?

该思维导图由 AI 生成,仅供参考

你好,我是孔令飞,接下来的两讲,我们来聊聊如何设计和开发日志包。
在做 Go 项目开发时,除了处理错误之外,我们必须要做的另外一件事是记录日志。通过记录日志,可以完成一些基本功能,比如开发、测试期间的 Debug,故障排除,数据分析,监控告警,以及记录发生的事件等。
要实现这些功能,首先我们需要一个优秀的日志包。另外,我还发现不少 Go 项目开发者记录日志很随意,输出的日志并不能有效定位到问题。所以,我们还需要知道怎么更好地记录日志,这就需要一个日志记录规范。
有了优秀的日志包和日志记录规范,我们就能很快地定位到问题,获取足够的信息,并完成后期的数据分析和监控告警,也可以很方便地进行调试了。这一讲,我就来详细介绍下,如何设计日志包和日志记录规范。
首先,我们来看下如何设计日志包。

如何设计日志包

目前,虽然有很多优秀的开源日志包可供我们选择,但在一个大型系统中,这些开源日志包很可能无法满足我们定制化的需求,这时候我们就需要自己开发日志包。
这些日志包可能是基于某个,或某几个开源的日志包改造而来,也可能是全新开发的日志包。那么在开发日志包时,我们需要实现哪些功能,又如何实现呢?接下来,我们就来详细聊聊。
先来看下日志包需要具备哪些功能。根据功能的重要性,我将日志包需要实现的功能分为基础功能高级功能可选功能。基础功能是一个日志包必须要具备的功能;高级功能、可选功能都是在特定场景下可增加的功能。我们先来说基础功能。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了设计和开发日志包的重要性和功能。作者首先强调了记录日志的必要性,包括在开发、测试期间的Debug,故障排除,数据分析,监控告警等方面的作用。然后详细介绍了如何设计日志包,包括基础功能、高级功能和可选功能。基础功能包括支持基本的日志信息、支持不同的日志级别、支持自定义配置和支持输出到标准输出和文件。高级功能包括支持多种日志格式、按级别分类输出、结构化日志、日志轮转和Hook能力。可选功能包括支持颜色输出、兼容标准库log包和支持输出到不同的位置。此外,文章还提到了设计日志包时需要关注的几个层面,如高性能、并发安全、插件化能力和日志参数控制。最后,文章指出了如何记录日志的重要性,包括在何处打印日志、在哪个日志级别打印日志和如何记录日志内容。整体而言,本文为读者提供了设计和开发日志包的指导,使读者能够更好地记录日志并进行故障排除、数据分析和监控告警。 文章还介绍了分布式日志解决方案EFK/ELK,通过Elasticsearch、Filebeat、Kibana等组件实现日志的收集、处理和展示。这些解决方案在实际项目开发中能够提高日志管理的效率和可靠性。最后,文章提出了课后练习,鼓励读者思考项目中日志包需要的功能和日志记录规范,并欢迎读者分享讨论。 总的来说,本文内容丰富,涵盖了日志包设计和开发的重要性、功能、分布式日志解决方案以及课后练习,为读者提供了全面的指导和思考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 语言项目开发实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(15)

  • 最新
  • 精选
  • XI
    请问下老师,大型的分布式服务都需要日志的链路追踪,日志的trance_id 由网关生成,每个微服务在接受请求的时候也应当必传trance_id 作为请求记录,大公司是这样设计的吗?

    作者回复: 大公司也是这么设计的。

    2021-07-13
    12
  • 先听
    body好像只可以读取一次,请问老师有没有什么好的办法来解决这个问题呢?

    作者回复: 可以看下github.com/tpkeeper/gin-dump包的实现,里面会dump http request body

    2021-08-02
    2
    7
  • Sch0ng
    对内,日志的作用是排查问题。 对外,日志的作用是跟人PK的时候为自己提供有力的证据。 记录日志是一个高频操作,需要简单、高性能。 实际项目里,如果不刻意治理,即使有日志规范,也是约等于没有。

    作者回复: 理解的到位!

    2021-08-11
    5
  • timidsmile
    对于日志轮转功能,其实我不建议在日志包中添加 ------ 这里使用Logrotate的话,是使用logrotate的哪种方式呢? * copytruncate 方式的话,对于大日志应该有性能问题吧? * create 方式的话,是需要通过接收特殊signal的方式来实现重新打开日志吗?考虑到很多信号已被用到shutdown中,这里有signal推荐吗?

    作者回复: copytruncate比较好吧,inode不变,这样应用程序可以继续写文件,也比较简单。一般一个系统一天的日志50G算是比较大的了,copy 50G的日志,不会给服务器带来压力的。

    2021-07-12
    5
  • helloworld
    “日志内容应该小写字母开头,以英文点号 . 结尾”,如果日志结尾有符号,在代码静态检查时,提示日志内容结尾不应有符号的,这块和您说的不一致

    作者回复: 可以不以 . 号结尾,其实影响不大,形成规范即可。

    2021-07-10
    5
  • lesserror
    孔老师,关于:拓展内容:分布式日志解决方案(EFK/ELK)。 这里有没有好的实践文章呢? 没有自己动手实践过,想学习一下。

    作者回复: 暂时没有,我从网上搜了一篇,你可以参考下:https://www.cnblogs.com/ludongguoa/p/15318282.html

    2021-10-07
    4
  • 疯琴
    感觉ELK组件的资源消耗和es强大的全文索引能力对于单纯的日志应用有些重了,大公司有充足的硬件资源和技术团队运维ELK组件倒是用起来比较省事,还可以考虑loki。

    作者回复: 是这样的的。方案需要根据实际情况来制定。

    2021-10-22
    3
  • 授人以🐟,不如授人以渔
    孔老师,在「在何处打印日志」这个地方,为什么特意提出:写操作时必须打印日志?会引发什么严重的问题?那应该在日志上输出什么信息呢?

    作者回复: 读操作,一般是类似List、Get这种接口,如果报错,影响不大。但是写操作,一般是Create、Update这类接口,如果失败会导致功能性接口失败,影响较大。 读操作一般是幂等的,写操作往往不是幂等的,写操作失败,可能还要清理脏数据,比较麻烦。

    2021-10-14
    2
  • Struggle~honor
    想请教下老师,大公司里面,我们的应用到部署在K8s上面,那么这些应用程序的日志应该怎样做持久化呢

    作者回复: 日志持久化可以试试EFK的解决方案。

    2021-12-19
    1
  • 张先森、
    老师,golang单例模式适用于哪些场景? 日志对象是否需要是单例?

    作者回复: 使用场景:只需要初始化一次, 程序中需要全局引用的对象。 日志对象,可以使用单例模式。

    2021-09-08
    1
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部