クラスタ内のエッジノードでLog4J2 TCPSocketServerを実行しています。すべてのデータノードは、エッジノード上のTCPSocketServerにログイベントを送信し、下に示すようにlog4j2.xml構成ファイルを使用してデータノードにローカルにもログを記録します。アプリケーション名はSystemプロパティとして保存され、$ {sys:ABC.appname}を使用してデータノードまたはクライアントのlog4j2.xml設定からアクセスできます。 log4j2.xmlを使用してTCPSocketServerが実行されているエッジノードに同じアプリ名を送信するにはどうすればよいですか。私はlog4j2-server.xmlの同じアプリケーション名を使用して、データノード上でローカルでやっているように、イベントを別々のログファイルに記録します。データ・ノードまたはクライアントからLog4J2:クライアントからサーバーへのTCPSocketServer実装でアプリケーション名を渡す方法
サンプルスニペット - log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" >
<Appenders>
<Socket name="socket" host="localhost" port="12345" >
<SerializedLayout />
</Socket>
<File name="MyFile" fileName="/var/log/${sys:ABC.appname}.log" >
<PatternLayout>
<Pattern>%d{ISO8601} %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="socket"/>
<AppenderRef ref="MyFile"/>
</Root>
</Loggers>
</Configuration>
エッジノードまたはサーバからのサンプルスニペット - log4j2-server.xmlの
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<File name="MyFile" fileName="/var/log/data/${hostName}-<**This is where I would like to see the appname from data node**>.log" >
<PatternLayout>
<Pattern>%d{ISO8601} %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
</File>
<Async name="AsyncFile">
<AppenderRef ref="MyFile" />
</Async>
</Appenders>
<Loggers>
<Root level="WARN">
<AppenderRef ref="AsyncFile"/>
</Root>
</Loggers>
</Configuration>