一、日志的功能
基本功能:快速定位问题
进阶-监控告警:健康检查,指标监控(告警)
高级-记录行为轨迹: 指标监控(查询)、链路追踪
二、日志规约
2.1 时效规约
- 当天日志命名
应用名.log
- 历史日志命名
{logname}.log.{yyyy-MM-dd}
-
日志至少保存15天
-
敏感操作信息联机存储6个月
2.2 日志记录规约
- 使用日志框架(SLF4j),而不是具体的日志库 符合依赖倒置原则:依赖于抽象而不是依赖于具体
小技巧:已经用了具体日志库的,可以用 {yourlog}-over-slf4j适配到日志框架上
- 输出日志时,字符串变量间的拼接使用占位符的方式
提升效率,如果直接拼接的话,不管需不需要打印出来,都会拼接,浪费cpu和内存。
- 日志打印时禁止用JSON工具将对象转成String
2.3 日志输出规约
-
trace/debug/info级别的日志输出,必须进行日志级别的开关判断 有疑问??
-
异常日志信息要完整:案发现场信息+异常堆栈信息
-
避免重复打印日志,日志配置文件里配置additivity=false
2.4 扩展日志规约
扩展日志单独存储
理解一下什么叫扩展日志,比如打点、临时监控、访问日志等
错误日志单独存储
业务日志和错误日志分开存储
三、logback最佳实践
3.1 logback配置文件
3.2 logback关键类图
3.3 logback日志线程模型
- 同步方式
- 异步方式
错误日志实时通知
通过appender将ERROR级别日志,实时输出。
- SMTPAppender
- 自定义的WechatHandleAppender
- 整合Sentry将日志发送至钉钉
四、 总结
我的项目中确实存在着日志打印随意,所有日志在一起,不方便查看处理、监控。本节课的学习,对项目实践有非常好的指导意义。
尤其扩展日志,怎么打,在哪打,还需要进一步设计和实践。
未知的内容:
Sentry整合