我正在使用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以LEVEL = INFO接收1条错误消息和N条先前的消息?
提前致谢。
当前这是不可能的:SMTP附加程序有一个缓冲区,可以在向电子邮件发送日志事件之前捕获日志事件,但仅捕获为目标级别配置的事件(示例中为ERROR)。如果将其更改为INFO,您将收到所有INFO级日志消息的电子邮件通知(而不仅仅是ERROR级消息之前的电子邮件通知)。
您可以在log4j 问题跟踪器或log4j用户邮件列表中提出此功能请求。
更正:我 错了,错了,错 !
STMP Appender确实具有缓冲区,但是它旨在捕获在错误日志事件之前的最后X个(默认情况下为512个)INFO,DEBUG,TRACE级消息。因此,它应该像您期望的那样工作(例如log4j-1.x SMTP附加程序有效)。
SMTP Appender在收到ERROR(或更严重)级别的日志事件时将触发电子邮件。所以,在你的配置,你应该 不会 只发送错误级别的日志事件,这个附加器(或你会错过它之前的信息,调试,跟踪事件)。
在您的配置中,更改<AppenderRef ref="AsyncMailer" level="error"/>为<AppenderRef ref="AsyncMailer"/>。
<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>