log4j 2 - 是否可以为一条日志消息使用多个标记?

时间:2015-03-04 21:17:25

标签: logging filter log4j2

我想做点什么

logger.debug(new Marker[]{SQL_UPDATE,USER},"Updating user account");

然后我可以过滤每个SQL_UPDATE和/或关于USER数据库的每个日志。

是否有可能以某种方式实现它?

一种解决方案是使用特定的日志消息,例如我会使用一些特定的文本,如@SQL_UP然后我会使用文本正则表达式过滤器,如:

<RegexFilter regex=".*@SQL_UP.*" onMatch="DENY" onMismatch="NEUTRAL"/>

但我认为它会慢一些,我需要小心,不要错误地将消息文本与标签混合......

1 个答案:

答案 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