簡體   English   中英

與Log4j2一起作為SLF4J后端丟失的EventData消息?

[英]EventData message lost with log4j2 as SLF4J backend?

我想使用SLF4J-ext EventData和EventLogger在我的業務邏輯中記錄重要事件:

public void onMessage(Message message) {
    EventData messageEvent = new EventData();
    messageEvent.setMessage("Message arrived");
    messageEvent.put("messageID", message.getJMSMessageID());
    EventLogger.logEvent(messageEvent);
}

我也想使用log4j2作為后端。 當前,這導致以下工件成為我的部署的一部分:slf4j-api-1.7.12,slf4j-ext-1.7.12,log4j-api-2.3,log4j-core-2.3,log4j-slf4j-impl-2.3, log4j-web-2.3-及其依賴關系,當然。

我的log4j2配置旨在在常規文件中生成格式化的條目:

[...]
<Appenders>
    <RollingFile name="traceFileAppender"
        fileName="${logBase}/trace.log"
        filePattern="${logBase}/trace.log.%d{yyyy-MM-dd}">
        <TimeBasedTriggeringPolicy interval="1" modulate="true" />
        <DefaultRolloverStrategy max="7"/>
        <PatternLayout pattern="%date{ISO8601}[%thread] %level %marker %logger%nThread-Stack: %x%nThread-Map: %X%nMessage-Map: %K%nMessage: %m%n%rEx-- %n%n" />
        <ThresholdFilter level="TRACE" onMatch="ACCEPT" onMismatch="DENY" />
    </RollingFile>
    [...]
</Appenders>
<Loggers>
    [...]
    <Logger name="EventLogger" level="INFO" additivity="true" />
    [...]
    <Root level="TRACE">
        <AppenderRef ref="traceFileAppender" />
        [...]
    </Root>
</Loggers>
[...]

但是,我的日志語句如下所示:

2015-07-31T08:13:55,589[MessageListenerThreadPool : 0] INFO EVENT EventLogger
Thread-Stack: []
Thread-Map: {}
Message-Map: {messageID=ID:c3e2d840d4d8d4f14040404040404040cf522d11eb57d22b}
Message: 
-- 

我想念什么?

log4j-slf4j-impl模塊 slf4j EventData對象轉換為log4j2 StructuredMessage。 輸出顯示消息ID,證明此轉換成功。

但是,輸出不顯示該消息。 看起來這是由於StructuredMessage.toString()實現所致。 乍看起來,似乎無法通過使用%K{key}轉換說明符為消息部分指定鍵來自定義此%K{key} ... :-(

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM