logback日志输出行号优化

======================发现问题======================

最近发现服务器日志输出了下面的告警日志:

o.j.m.d.r.service.impl.xxxServiceImpl:137 - Warn: execute Method There are  3 results.

但是看业务类源码,对应行号不可能会有上面的日志输出.

======================分析问题======================

经查找发现,实际日志输出是mybatisPlus中SqlHelper类中的输出,刚好是137行

但是对应的类名确实业务类,根据getObject反向查找引用类,排查出来实际是在其他类中调用了业务类的通用方法(业务类实现了com.baomidou.mybatisplus.extension.service.impl.ServiceImpl): 

public <V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper) {
  return SqlHelper.getObject(log, listObjs(queryWrapper, mapper));
}

这里的log对象最终会返回当前对应的业务类,在SqlHelper中使用的也是ServiceImpl中的log对象,这样最后日志输出就变成了 xxxServiceImpl:137 ………………

======================优化======================

跟踪logback源码,日志的行号输出默认处理类为LineOfCallerConverter(默认取堆栈信息中的第一个类的行号,上面的例子即为SqlHelper中的137行),在PatternLayout中初始化了

增加自定义行号处理类LineConverter,循环堆栈信息,获取className与loggerName一致的行号,这样至少我可以知道业务类哪行输出的日志

在logback-spring.xml中增加自定义处理类配置:

这里需要注意,pattern中配置的对应行号是L还是line,就一定要增加对应的配置,上面截图是两个都配置了

======================Other======================

SpringBoot项目,logback-spring.xml  配置conversionRule读取处理逻辑:

LogbackLoggingSystem.loadConfiguration  读取 classpath:logback-spring.xml 配置文件

GenericConfigurator.buildInterpreter  添加 rule处理规则类

JoranConfiguratorBase中加入了ConversionRuleAction处理类

ConversionRuleAction中,会将logback-spring.xml  配置的conversionRule放入 context中 

最后会在 PatternLayoutBase 中,替换掉默认的LineOfCallerConverter 配置:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值