当前位置: 首页 > 面试题库 >

log4j2 SMTP Appender:如何在其他级别包含以前的邮件?

平光明
2023-03-14
问题内容

我正在使用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"/>

那应该解决问题。如果您仍然遇到问题,则其他人也会报告类似的问题,并且显然可以通过向配置中添加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>


 类似资料:
  • 我想在ASP.NET中包含其他aspx文件到主aspx文件,我可以在jsp中这样做,jsp中的代码包括

  • 我有一个定义网络结构的对象,我想发送该对象的所有子对象和子对象的子对象,等等。 现在我有这个: 这段代码将获得大部分级别,但如果网络有许多不同的层,则不会获得所有级别。我如何才能使其包含所有层。

  • 如果我直接编写上面的代码,上面的代码可以正常工作,我试图在其他文件和主文件中编写此代码,我做了 我如何能包括它有没有办法包括,也想知道一个更好的方式来写上述声明。 谢谢你

  • 本文向大家介绍块级元素不能包含其他块级元素有那些?相关面试题,主要包含被问及块级元素不能包含其他块级元素有那些?时的应答技巧和注意事项,需要的朋友参考一下 嵌套规则: 块级元素可以包含内联元素或某些块级元素,但内联元素不能包含块级元素,它只能包含其它内联元素。 块级元素不能放在p里面。 有几个特殊的块级元素只能包含内联元素,不能包含块级元素。如h1,h2,h3,h4,h5,h6,p,dt li内可

  • 我正在编写一个查询来选择所有行,其中所有子行只包含相同的值,而不包含其他场景。 尝试了很多网上的例子,没有匹配。 从所有子级仅包含相同值而没有其他方案的表中选择*。必须包含至少一个要返回的子级。 子级通过ID映射到父级。 子值为一列,可以为int或null。假设所有子级必须包含值5,而不包含任何其他值。如果大多数子级都包含5,则将不起作用,则必须是所有子级都只有5的家长。 父级可能有多个子级 父级