我想做点什么
logger.debug(new Marker[]{SQL_UPDATE,USER},"Updating user account");
然后我可以过滤每个SQL_UPDATE和/或关于USER数据库的每个日志。
是否有可能以某种方式实现它?
一种解决方案是使用特定的日志消息,例如我会使用一些特定的文本,如@SQL_UP然后我会使用文本正则表达式过滤器,如:
<RegexFilter regex=".*@SQL_UP.*" onMatch="DENY" onMismatch="NEUTRAL"/>
但我认为它会慢一些,我需要小心,不要错误地将消息文本与标签混合......
答案 0 :(得分:2)
据我所知,log4j2只允许每个日志消息应用一个标记。但是,可以通过调用addParents方法为标记指定父标记。
实施例。使用定义的标记DEALERSHIP_A,DEALERSHIP_B和PORSCHE
以下过滤器将记录有关DEALERSHIP_A&#39; PORSCHE的所有消息
爪哇
Marker DEALERSHIP_A, DEALERSHIP_B, PORSCHE;//must use MarkerManager.getMarker
PORSCHE.addParents(DEALERSHIP_A);//adds parents
logger.log(PORSCHE,"The 911 has maintenance issues");
PORSCE.setParents(DEALERSHIP_B);//replaces parents
logger.log(PORSCHE,"A cayenne has just been sold");
`
配置文件
<filters>
<MarkerFilter marker="DEALERSHIP_A" onMatch="Neutral" onMismatch="Deny"/>
<MarkerFilter marker="PORSCHE" onMatch="Accept" onMismatch="Deny"
</filters>
带过滤器的控制台输出
The 911 has maintenance issues