slf4j 标记与流畅的 api 一起使用时会被 log4j2 配置忽略,但与非流畅的 api 一起使用时效果很好

问题描述 投票:0回答:0

slf4j 标记与 LoggingEventBuilder api(流畅的)一起使用时会被 log4j2 配置忽略,但是当相同的标记与 slf4j Logger 非流畅的 api 一起使用时 [例如,trace(Marker marker, String msg)],它可以很好地与 log4j2 过滤器配置一起使用.

例如,我正在使用以下 (log4j2) 过滤器配置。

NoMarkerFilter:
     onMatch: deny
     onMismatch: accept

现在,如果我使用不流畅的传统 api 来记录带有标记的事件,这些事件将被接受,并且我可以在日志输出中看到它们。

但是,当使用 LoggingEventBuilder fluent apis 记录带有标记的事件时,log4j2 过滤器配置会忽略标记。使用 log4j2 MarkerFilter 时也是这个问题。

private static final Marker marker = MarkerFactory.getMarker("TESTMARKER");
log.trace(marker, "This is logged using traditional api"); //accepted and shown in output
log.atTrace().addMarker(marker).log("This is logged using fluent api"); //denied, and NOT showing in output

我检查了 slf4j 和 log4j2 文档,还用谷歌搜索了 log4j2 在 slf4j 中与 fluent api 一起使用时是否仍然不支持标记,但找不到任何此类参考。

我使用了 lombok 插件以及 log4j-core 和 log4j-slf4j2-impl 依赖项

...
id "io.freefair.lombok" version "6.6.1"
...
implementation 'org.apache.logging.log4j:log4j-core:2.19.0'
implementation 'org.apache.logging.log4j:log4j-slf4j2-impl:2.19.0'

期望:与 fluent apis 一起使用的 slf4j 标记应该与 log4j2 过滤器配置一起工作,并且不应该被忽略。

logging log4j2 slf4j
© www.soinside.com 2019 - 2024. All rights reserved.