logback在打印日志的时候输出当前用户名,可以采用pattern的方式,常见的pattern有date, thread,因此我们需要自定义一个pattern占位符即可,在logback.xml中设置conversionRule,继承ClassicConverter,
<conversionRule conversionWord="user" converterClass="com.xxx.CurrentUserConverter" />
在接口测试中,有的账户要跑大量的数据,会记录很多日志,给硬盘造成很大压力,因此想要这些账户不打印日志。
最初的想法是继承TurboFilter,重写decide()方法,从subject里拿到当前用户名,如果符合限制,则返回FilterReply.DENY,否则返回FilterReply.NEUTRAL。
想法是好的,结果项目死循环,启动不了。因为logger.log()->turboFilter.decide()->subject.getPrincipal()->subject.getSession()->logger.log()->turboFilter.decide()这样死循环了,最后只能作罢,通过让前端在Http请求时带上特殊header,request.getHeader()方法没有logger代码的使用,规避了死循环。
<turboFilter class="com.xxx.LoggingIgnoredTurboFilter"/>
我们发现,在logback框架中如果logback要打印日志,都是通过System.out/error来做得,不能自己调用自己来打印日志。