开课吧孤尽T31训练营学习笔记-DAY6-日志

279 阅读2分钟

一、日志的功能

基本功能:快速定位问题

进阶-监控告警:健康检查,指标监控(告警)

高级-记录行为轨迹: 指标监控(查询)、链路追踪

二、日志规约

2.1 时效规约

  1. 当天日志命名

应用名.log

  1. 历史日志命名

{logname}.log.{yyyy-MM-dd}

  1. 日志至少保存15天

  2. 敏感操作信息联机存储6个月

2.2 日志记录规约

  1. 使用日志框架(SLF4j),而不是具体的日志库 符合依赖倒置原则:依赖于抽象而不是依赖于具体

小技巧:已经用了具体日志库的,可以用 {yourlog}-over-slf4j适配到日志框架上

  1. 输出日志时,字符串变量间的拼接使用占位符的方式

提升效率,如果直接拼接的话,不管需不需要打印出来,都会拼接,浪费cpu和内存。

  1. 日志打印时禁止用JSON工具将对象转成String

2.3 日志输出规约

  1. trace/debug/info级别的日志输出,必须进行日志级别的开关判断 有疑问??

  2. 异常日志信息要完整:案发现场信息+异常堆栈信息

  3. 避免重复打印日志,日志配置文件里配置additivity=false

2.4 扩展日志规约

扩展日志单独存储

理解一下什么叫扩展日志,比如打点、临时监控、访问日志等

错误日志单独存储

业务日志和错误日志分开存储

三、logback最佳实践

3.1 logback配置文件

image.png

3.2 logback关键类图

image.png

3.3 logback日志线程模型

  1. 同步方式

image.png

  1. 异步方式

image.png

错误日志实时通知

通过appender将ERROR级别日志,实时输出。

  1. SMTPAppender
  2. 自定义的WechatHandleAppender
  3. 整合Sentry将日志发送至钉钉

四、 总结

我的项目中确实存在着日志打印随意,所有日志在一起,不方便查看处理、监控。本节课的学习,对项目实践有非常好的指导意义。

尤其扩展日志,怎么打,在哪打,还需要进一步设计和实践。

未知的内容:
Sentry整合