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 级别日志消息的电子邮件通知(不仅仅是错误级别消息之前的那些)。

您可以在 log4j问题跟踪器或 log4j-user 邮件列表上将此作为功能请求提出。


更正:我错了,错了,错了

STMP Appender 确实有一个缓冲区,但它旨在捕获在 ERROR 日志事件之前的最后 X(默认为 512)INFO、DEBUG、TRACE 级别的消息。所以它应该像你预期的那样工作(就像 log4j-1.x SMTP appender 一样)。

SMTP Appender 在收到 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 回答