手把手带你写一个 Web 框架
叶剑峰
腾讯高级工程师,前滴滴技术专家
22731 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
特别放送 (1讲)
手把手带你写一个 Web 框架
15
15
1.0x
00:00/00:00
登录|注册

17|日志:如何设计多输出的日志服务?

发送请求时加入全链路字段
打印日志时获取全链路字段
解析全链路字段
HadeCustomLog
HadeSingleLog
实例化方法
结构定义
实例化方法
logf核心函数
Info方法实现
输出管道设置
Formatter方法
日志上下文字段
输出内容
日志级别定义
七种日志级别
全链路日志需求
其他具体实现
HadeRotateLog
HadeConsoleLog
HadeLog通用实例
日志服务提供者方法
日志服务提供者参数
注册服务实例方法
日志输出
日志格式
日志级别
日志服务作为核心积木
一切皆服务思想
实现多输出的日志服务
思考题
日志服务的具体实现
日志服务提供者
日志接口协议
日志服务
日志服务设计

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

你好,我是轩脉刃。
上面两节课,我们将环境变量和配置服务作为一个服务注册到容器中了。这样,在业务中就能很方便获取环境变量和配置了。不知道你有没有逐渐体会到这种“一切皆服务”思想的好处。
就像堆积积木,只要想好了一个服务的接口,我们逐步实现服务之后,这一个服务就是一块积木,之后可以用相同的思路实现各种服务的积木块,用它们来拼出我们需要的业务逻辑。这节课,我们就来实现另一个框架最核心的积木:日志服务。
实现一个框架的服务,我们习惯了要创建三个文件:接口协议文件 framework/contract/log.go、服务提供者 framework/provider/log/provider.go、接口实例 framework/provider/log/service.go。

日志接口协议

说到日志服务,最先冒出来的一定是三个问题:什么样的日志需要输出?日志输出哪些内容?日志输出到哪里?一个个来分析。

日志级别

什么样的日志需要输出,这是个关于日志级别的问题。我们想要把日志分为几个级别?每个级别代表什么?这个日志级别其实在不同系统中有不同划分,比如 Linux 的syslog中将系统划分为以下八种日志级别:
而 Java 的log4j将日志分为以下七种日志级别:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了如何设计多输出的日志服务,包括日志服务的接口协议、日志级别的定义和日志格式的设定。作者通过类型嵌套的方式实现了四种不同的日志输出方式,包括控制台输出、本地单个日志文件输出、本地单个日志文件自动进行切割输出和自定义输出。文章还讨论了从context中获取日志上下文字段的方法和将日志信息组织成字符串的通用方法。通过具体代码示例,展示了如何实现日志服务的具体实例,以及如何使用io.Writer来设置输出管道的方法。整体而言,本文详细介绍了日志服务的设计思路和实现方法,对于需要设计多输出的日志服务的开发人员具有一定的参考价值。文章还提出了思考题,引发读者对全链路日志功能的实现进行思考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一个 Web 框架》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • qinsi
    接收下游请求和返回响应时打印日志可以在中间件中解决,向上游发送请求时打印日志可能需要框架提供一种方法截获请求并向其中注入trace信息,或者是自行封装一个http请求服务

    作者回复: 是的,一般是在中间件中解决

    2021-10-25
    3
    2
  • Charles
    日志输出的原理讲的很细,受益匪浅。用作者的源码切换日志输出类型咋没有效果
    2022-04-10
  • Geek_78dacc
    将log.SetOutput设置为文件,程序中正常的info,debug日志都可以记录至该文件中。但是当程序出现panic时,却不能记录panic日志。请问这个是为什么呀?除了在每次go func()时,手动捕捉panic并显式打印日志外,还有什么更加优雅的解决方案吗?
    2022-02-24
  • chongsheng
    这块貌似没有实现配置热更新。常见的需求是日志级别的热更新
    2022-02-22
    2
  • 牛玉富
    定制化的日志功能就得像这样,把每个细节都展开梳理清了才能动手。对日志感触挺深的是调用了个第三方类库修改麻烦至极。索性最后自己实现了。
    2022-01-13
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部