2017-07-06 31 views
0

ロギングにlog4j-2.7を使用するスプリングブート(v1.5.4)Webアプリケーションがあります。 ログメッセージをファイルやコンソールに書き込むときにはうまく動作しますが、メッセージをTcpSocketServerに送信すると、ログサーバーは「{}」の書式を指定しないでメッセージを出力します。例えば、このコード:log4j2 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の中SocketAppendersと私のconfigがあります。 xml

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

これはTcpSocketServerのための私のconfigファイル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> 

そして:

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 

誰もがここで間違って何が起こっているのか知っていて、それを修正する方法?ありがとう!

答えて

0

JIRA of log4j2にバグを報告します。良い人がこの問題を解決するのに役立ちます。

溶液はlog4jの-2.8.2に更新され、そしてTcpSocketServerを開始するため、この引数を追加する:

--classes java.util.Collections$UnmodifiableMap --classes java.util.HashMap 
関連する問題