6

私は log4j2-beta9 を使用しており、次の構成 (その一部) があります。

<Appenders>
    <SMTP name="Mailer" suppressExceptions="false"
          subject="${subject}" to="${receipients}" from="${from}"
          smtpHost="${smtpHost}" smtpPort="${smtpPort}"
          smtpProtocol="${smtpProtocol}" smtpUsername="${smtpUser}"
          smtpPassword="${smtpPassword}" smtpDebug="false" bufferSize="20">
        <PatternLayout>
            <pattern>%d{dd-MM-yyyy HH:mm:ss,SSS} %5p %m%n</pattern>
        </PatternLayout>
    </SMTP>

    <Async name="AsyncMailer">
        <AppenderRef ref="Mailer"/>
    </Async>
</Appenders>
<Loggers>
    <Root level="info">
        <AppenderRef ref="AsyncMailer" level="error"/>
    </Root>
</Loggers>

この構成では、エラー メッセージが 1 つだけの電子メールを受け取ります。log4j2 を構成して、1 つのエラー メッセージと N 個の以前のメッセージを LEVEL=INFO で受け取るようにするにはどうすればよいですか?

前もって感謝します。

4

1 に答える 1

8

これは現在不可能です。SMTP アペンダーには、ログ イベントを電子メールで送信する前にキャプチャするバッファがありますが、ターゲット レベル用に構成されたイベントのみをキャプチャします (この例では ERROR)。これを INFO に変更すると、すべての INFO レベルのログ メッセージ (ERROR レベルのメッセージに先行するものだけでなく) について電子メール通知を受け取ることになります。

これは、log4jイシュー トラッカーまたは log4j-user メーリング リストで機能要求として提起できます。


訂正: 私は間違っていた、間違っていた、間違っていた!

STMP Appender にはバッファがありますが、ERROR ログ イベントに先行する最後の X (デフォルトでは 512) の INFO、DEBUG、TRACE レベルのメッセージをキャプチャするためのものです。したがって、期待どおりに動作するはずです (log4j-1.x SMTP アペンダーが動作するように)。

SMTP Appender は、ERROR (またはより深刻な) レベルのログ イベントを取得すると、電子メールを送信します。したがって、構成では、このアペンダーに ERROR レベルのログ イベントを送信するだけではいけません(そうしないと、その前にある INFO、DEBUG、TRACE イベントを見逃すことになります)。

構成で、に変更<AppenderRef ref="AsyncMailer" level="error"/><AppenderRef ref="AsyncMailer"/>ます。

これで問題は解決するはずです。それでも問題が発生する場合は、他の誰かが同様の問題を報告しており、設定に ThresholdFilter を追加することで回避策を見つけたようです。

<Appenders>
    <SMTP name="Mailer" suppressExceptions="false"
          subject="${subject}" to="${receipients}" from="${from}"
          smtpHost="${smtpHost}" smtpPort="${smtpPort}"
          smtpProtocol="${smtpProtocol}" smtpUsername="${smtpUser}"
          smtpPassword="${smtpPassword}" smtpDebug="false" bufferSize="20">

        <ThresholdFilter level="debug" onMatch="NEUTRAL" onMismatch="DENY" /> 
        <PatternLayout>
            <pattern>%d{dd-MM-yyyy HH:mm:ss,SSS} %5p %m%n</pattern>
        </PatternLayout>
    </SMTP>

    <Async name="AsyncMailer">
        <AppenderRef ref="Mailer"/>
    </Async>
</Appenders>
<Loggers>
    <Root level="info">
        <AppenderRef ref="AsyncMailer" />
    </Root>
</Loggers>
于 2014-01-15T01:49:30.427 に答える