0

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_ROLLSYSLOG、メッセージはログ ファイルに正しく出力されます。

2: ロガーに偽の名前を付けると、システム ログに log4j init エラー メッセージが表示されます。

3: syslog アペンダに誤ったホスト パラメータを指定すると、ホストが見つからないというエラーが表示され、ロギングが失敗します。元の質問に記載されている構成を保存した後、このメッセージが表示されないため、構文にエラーはないと想定できます。

4: 両側のファイアウォールは問題ではありません。telnet で接続でき、ポート TCP:514 が両側で適切な方向に許可されていることを確認しました。

4

1 に答える 1

0

私は同じ動作を経験しています.Syslogアペンダーは接続を試みません.アプリケーションを数回停止して再起動すると、正しくログに記録されますが、ほとんどログに記録されないため、これはSyslogアペンダーのバグだと思います.

- - アップデート - -

私の場合、問題はDNS解決に関するものであることがわかりました。rsyslogd構成でリモートホストからのメッセージのDNS解決を無効にしてみてください。アームデバイスのubuntuで、/ etc/defaultでオプションを見つけました/rsyslog

# Options for rsyslogd
# -x disables DNS lookups for remote messages
# See rsyslogd(8) for more details
RSYSLOGD_OPTIONS="-x"
于 2016-04-22T09:28:06.540 に答える