服务日志优化

背景

功能权限服务之前经手的人比较多,不同人日志打印比较乱,并且服务日志打印量很大,但当需要排查问题时,大日志量 grep 困难、关键信息打印不全或没有打印等问题很痛苦,决定对日志方面进行统一的优化

优化目标

  1. 对服务日志量大、关键信息不全、代码中侵入式打印日志乱等问题进行优化
  2. 人员角色模块,经常有用户、业务不知道什么时候人员角色发生了变化,针对这个模块增加审计日志,便于观察分析调用、排查问题,给出证据
  3. 日志上报日志中心,使得服务发布后日志不丢失

优化记录

服务日志优化

  • 日志级别

  • 日志内容
    traceId,方法名,方法调用链路,每个方法耗时,入参,出参,异常堆栈

  • 相关类
    使用 Spring AOPThreadLocalSpring StopWatchAnnotation 注解
    支持两种日志打印方式,AOP 打印和手动调用

  • 使用方式

  1. 新建切面类,继承 TraceLogAop 抽象类
  2. 编写切点,使用环绕通知,切在需要打印日志的地方
  3. 通知中调用父类的 around 方法,传入 ProceedingJoinPoint 和打印耗时日志阈值
  4. 如需要特殊处理异常,则重写 exceptionHandler 方法
  5. 在需要打印 info 日志的方法上添加 @InOutLog("info") 注解,debug 级别不用添加,默认就是 debug 级别
  6. 也可以修改 logback.xml 文件,添加一个 logger 把日志打印到独立的文件中
  • 优化效果
    入参、出参效果

    方法调用链路、耗时效果

    根据详细的入参、出参可以快速、准确的排查问题;根据调用链路和耗时可以来分析耗时长的接口,以及耗时的占比,找到最耗时的方法,从而进行优化

添加审计日志

人员角色模块增加审计日志,上报ES,使用 kibana 展示,便于观察分析调用、排查问题,给出证据

上报日志中心

有时查问题前一天晚上有过发版,日志信息丢失,导致查询问题困难,针对这种情况把日志上报到日志中心的 Grafana Explore中


把日志整体优化后,再也没有了以前的苦恼,有什么问题一目了然(^▽^)

分享到: