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

log4j 2 - is it possible to use multiple markers for one log message?

我想做类似的事情

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

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

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

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

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

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

据我所知,log4j2 只允许对每条日志消息应用一个标记。但是,可以通过调用 addParents 方法为标记指定父标记。

例如。使用定义的标记 DEALERSHIP_A、DEALERSHIP_B 和 PORSCHE

以下过滤器将记录有关 DEALERSHIP_A 的 PORSCHE

的所有消息

Java

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