log4j2 TcpSocketServer不替换任何" {}"在消息中

时间:2017-07-06 09:54:51

标签: spring-boot log4j2

我有一个spring boot(v1.5.4)Web应用程序,它使用log4j-2.7进行日志记录。 将日志消息写入文件或控制台时效果很好,但是当向TcpSocketServer发送消息时,日志服务器只输出没有" {}"格式。例如,对于此代码:

logger.info("Request from [{}] to [{}]", ipInfo, reqPath);

RollingfileAppenderConsoleAppender将输出:

INFO  2017-07-06 16:46:07,929 [127.0.0.1][/senten/align] AuthFilter (http-nio-8180-exec-2) Request from [127.0.0.1] to [/senten/align] 

SocketAppender只是输出:

INFO  2017-07-06 16:46:07,929 [127.0.0.1][/senten/align] AuthFilter (http-nio-8180-exec-2) Request from [{}] to [{}] 

这是我在log4j.xml中使用SocketAppenders的配置

<Appenders>
    <Socket name="socket" host="127.0.0.1" port="9898">
        <SerializedLayout />
    </Socket>
    ........
</Appenders>

这是log4j2-socket.xml的配置文件TcpSocketServer

<Configuration status="WARN">
    <Appenders>
        <RollingFile name="default" fileName="Logs/app.log"
            filePattern="Logs/${date:yyyy-MM}/app-%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout>
                <Pattern>%-5p %d [%X{ip}][%X{reqPath}] %c{1} (%t) %m %ex%n</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval = "30" modulate="true"/>
                <SizeBasedTriggeringPolicy size="200 MB" />
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="DEBUG">
            <AppenderRef ref="default" level="DEBUG" />
        </Root>
    </Loggers>
</Configuration>

并且,我使用此命令启动TcpSocketServer

java -classpath log4j-core-2.7.jar:log4j-api-2.7.jar:jcommander-1.48.jar org.apache.logging.log4j.core.net.server.TcpSocketServer -p 9898 -c log4j2-socket.xml

有谁知道这里出了什么问题,以及如何解决?谢谢!

1 个答案:

答案 0 :(得分:0)

我在JIRA of log4j2上提交了一个错误。一个好人帮我解决了这个问题。

解决方案是更新到log4j-2.8.2,并添加此参数以启动TcpSocketServer

--classes java.util.Collections$UnmodifiableMap --classes java.util.HashMap