17|日志:如何设计多输出的日志服务?
叶剑峰
该思维导图由 AI 生成,仅供参考
你好,我是轩脉刃。
上面两节课,我们将环境变量和配置服务作为一个服务注册到容器中了。这样,在业务中就能很方便获取环境变量和配置了。不知道你有没有逐渐体会到这种“一切皆服务”思想的好处。
就像堆积积木,只要想好了一个服务的接口,我们逐步实现服务之后,这一个服务就是一块积木,之后可以用相同的思路实现各种服务的积木块,用它们来拼出我们需要的业务逻辑。这节课,我们就来实现另一个框架最核心的积木:日志服务。
实现一个框架的服务,我们习惯了要创建三个文件:接口协议文件 framework/contract/log.go、服务提供者 framework/provider/log/provider.go、接口实例 framework/provider/log/service.go。
日志接口协议
说到日志服务,最先冒出来的一定是三个问题:什么样的日志需要输出?日志输出哪些内容?日志输出到哪里?一个个来分析。
日志级别
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文详细介绍了如何设计多输出的日志服务,包括日志服务的接口协议、日志级别的定义和日志格式的设定。作者通过类型嵌套的方式实现了四种不同的日志输出方式,包括控制台输出、本地单个日志文件输出、本地单个日志文件自动进行切割输出和自定义输出。文章还讨论了从context中获取日志上下文字段的方法和将日志信息组织成字符串的通用方法。通过具体代码示例,展示了如何实现日志服务的具体实例,以及如何使用io.Writer来设置输出管道的方法。整体而言,本文详细介绍了日志服务的设计思路和实现方法,对于需要设计多输出的日志服务的开发人员具有一定的参考价值。文章还提出了思考题,引发读者对全链路日志功能的实现进行思考。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一个 Web 框架》,新⼈⾸单¥59
《手把手带你写一个 Web 框架》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(5)
- 最新
- 精选
- qinsi接收下游请求和返回响应时打印日志可以在中间件中解决,向上游发送请求时打印日志可能需要框架提供一种方法截获请求并向其中注入trace信息,或者是自行封装一个http请求服务
作者回复: 是的,一般是在中间件中解决
2021-10-2532 - Charles日志输出的原理讲的很细,受益匪浅。用作者的源码切换日志输出类型咋没有效果2022-04-10
- Geek_78dacc将log.SetOutput设置为文件,程序中正常的info,debug日志都可以记录至该文件中。但是当程序出现panic时,却不能记录panic日志。请问这个是为什么呀?除了在每次go func()时,手动捕捉panic并显式打印日志外,还有什么更加优雅的解决方案吗?2022-02-24
- chongsheng这块貌似没有实现配置热更新。常见的需求是日志级别的热更新2022-02-222
- 牛玉富定制化的日志功能就得像这样,把每个细节都展开梳理清了才能动手。对日志感触挺深的是调用了个第三方类库修改麻烦至极。索性最后自己实现了。2022-01-13
收起评论