背景
功能权限服务之前经手的人比较多,不同人日志打印比较乱,并且服务日志打印量很大,但当需要排查问题时,大日志量
grep
困难、关键信息打印不全或没有打印等问题很痛苦,决定对日志方面进行统一的优化
优化目标
- 对服务日志量大、关键信息不全、代码中侵入式打印日志乱等问题进行优化
- 人员角色模块,经常有用户、业务不知道什么时候人员角色发生了变化,针对这个模块增加审计日志,便于观察分析调用、排查问题,给出证据
- 日志上报日志中心,使得服务发布后日志不丢失
优化记录
服务日志优化
日志级别
日志内容
traceId
,方法名,方法调用链路,每个方法耗时,入参,出参,异常堆栈相关类
使用Spring AOP
、ThreadLocal
、Spring StopWatch
、Annotation
注解
支持两种日志打印方式,AOP
打印和手动调用使用方式
- 新建切面类,继承
TraceLogAop
抽象类 - 编写切点,使用环绕通知,切在需要打印日志的地方
- 通知中调用父类的
around
方法,传入ProceedingJoinPoint
和打印耗时日志阈值 - 如需要特殊处理异常,则重写
exceptionHandler
方法 - 在需要打印
info
日志的方法上添加@InOutLog("info")
注解,debug
级别不用添加,默认就是debug
级别 - 也可以修改
logback.xml
文件,添加一个logger
把日志打印到独立的文件中
- 优化效果
入参、出参效果
方法调用链路、耗时效果
根据详细的入参、出参可以快速、准确的排查问题;根据调用链路和耗时可以来分析耗时长的接口,以及耗时的占比,找到最耗时的方法,从而进行优化
添加审计日志
人员角色模块增加审计日志,上报ES,使用 kibana 展示,便于观察分析调用、排查问题,给出证据
上报日志中心
有时查问题前一天晚上有过发版,日志信息丢失,导致查询问题困难,针对这种情况把日志上报到日志中心的 Grafana Explore中
把日志整体优化后,再也没有了以前的苦恼,有什么问题一目了然(^▽^)