log4j を使用してログ ファイルを書き込むアプリケーションがあります。ソースコードにアクセスすることはできませんが、log4j.xml ファイルにアペンダーを作成すれば、コードを変更しなくてもそのアペンダーを使用できるはずです。
現在、wireshark 経由でシステムからリモート syslog サーバーにパケットが生成されていないことを確認できます。ポート 514 でリモート syslog サーバーに telnet で接続し、問題なくメッセージを書き込むことができます。XML に問題があると推測できますが、エラーの内容を伝えるメッセージはありません。
アペンダーは次のとおりです。
<appender name="SYSLOG" class="org.apache.log4j.net.SyslogAppender">
<param name="Facility" value="USER" />
<param name="syslogHost" value="172.16.81.39:514" />
<param name="Threshold" value="INFO" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy/MM/dd HH:mm:ss.SSS}][%5p](%t) %m%n" />
</layout>
</appender>
Log4j 2構文も試しました
<appender name="syslog" class="org.apache.log4j.net.SyslogAppender">
<param name="format" value="bsd" />
<param name="host" value="172.16.81.39" />
<param name="port" value="514" />
<param name="protocol" value="TCP" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy/MM/dd HH:mm:ss.SSS}][%5p](%t) %m%n" />
</layout>
</appender>
対応するロガーは次のとおりです。
<logger name="printing.com.application" additivity="false">
<level value="INFO" />
<appender-ref ref="SYSLOG" />
</logger>
<appender-ref />
デフォルトの PRINTING_MONTHLY_ROLL に変更すると、ログ ファイルに出力されます。
編集:まだ困惑していますが、私の問題についてさらに情報を追加します
1: デフォルトの名前を に変更するPRINTING_MONTHLY_ROLL
とSYSLOG
、メッセージはログ ファイルに正しく出力されます。
2: ロガーに偽の名前を付けると、システム ログに log4j init エラー メッセージが表示されます。
3: syslog アペンダに誤ったホスト パラメータを指定すると、ホストが見つからないというエラーが表示され、ロギングが失敗します。元の質問に記載されている構成を保存した後、このメッセージが表示されないため、構文にエラーはないと想定できます。
4: 両側のファイアウォールは問題ではありません。telnet で接続でき、ポート TCP:514 が両側で適切な方向に許可されていることを確認しました。