【问题标题】:Log4j2 custom email subject from Map来自 Map 的 Log4j2 自定义电子邮件主题
【发布时间】:2015-06-08 18:11:55
【问题描述】:

我已经为我的客户安装了一些应用程序,并且我配置了 smtp appender 以接收错误电子邮件。

不幸的是,我需要一种方法来了解来自哪个客户的电子邮件。

我正在尝试在地图中设置一个参数,以便将其显示为电子邮件的主题。只有在我的应用程序启动并且数据库启动后,我才能设置此参数:

String[] parametri = {username};
MapLookup.setMainArguments(parametri);

而我的 log4j2.xml 是:

<SMTP name="Mailer" subject="${sys:logPath} - ${map:0}" to="${receipients}"
        from="${from}" smtpHost="${smtpHost}" smtpPort="${smtpPort}"
        smtpProtocol="${smtpProtocol}" smtpUsername="${smtpUser}"
        smtpPassword="${smtpPassword}" smtpDebug="false" bufferSize="200"
        ignoreExceptions="false">
    </SMTP>

主题是相关部分。不幸的是,主题并没有从 log4j 中替换,而是保持原样。

我做错了什么?

谢谢

【问题讨论】:

    标签: java logging configuration log4j log4j2


    【解决方案1】:

    目前,SmtpAppender 类(实际上是它的助手 SmtpManager)创建一次 MimeMessage 对象并将其重用于所有要发送的消息。消息主题仅初始化一次。仅在读取您的配置时进行一次查找。

    我建议您针对您的用例在 Log4j2 Jira 问题跟踪器上提出功能请求。

    【讨论】:

      【解决方案2】:

      注意:log4j 2.6+ 原生支持这个;为此,您需要 Java7+。

      我为 log4j2 和 Java6 创建了一个免费可用的解决方案,其中 ExtendedSmtpAppender 在主题中支持 PatternLayout。
      如果您仍然使用 log4j 1.x(原始问题),只需将您的 log4j-1.x.jar 替换为 log4j-1.2-api-2.x.jar - 和 log4j-core-2.x.jar + log4j-api-2.x.jar 当然。

      您从 Maven Central 以 de.it-tw:log4j2-extras 的形式获取它(这需要 Java 7+ 和 log4j 2.8+)。
      如果您受限于 Java 6(以及 log4j 2.3),那么请使用 de.it-tw:log4j2-Java6-extras

      另见 GitLab 项目:https://gitlab.com/thiesw/log4j2-extras(或https://gitlab.com/thiesw/log4j2-Java6-extras


      此外,它支持突发摘要,因此您不会在几秒钟或几分钟内收到 1000 封错误电子邮件。用例:通过电子邮件将所有错误日志发送给支持/开发人员。在损坏的网络或数据库上,这可能会导致数百封相同的错误电子邮件。 此附加程序执行以下操作:

      • 第一次出现立即通过电子邮件发送
      • 以下所有类似的 ERROR 日志都会缓冲一段时间(相似度和时间可配置)
      • 时间过去后,将发送一封包含摘要信息(事件数、时间)以及第一个和最后一个事件的摘要电子邮件

      示例配置(在 内):

      <SMTPx name="ErrorMail" smtpHost="mailer.xxxx.de" smtpPort="25"
              from="your name &lt;noReply@xxx.de>"  to="${errorEmailAddresses}"
              subject="[PROJECT-ID, ${hostName}, ${web:contextPath}] %p: %c{1} - %m%notEmpty{ =>%ex{short})}"
              subjectWithLayout="true"  bufferSize="5"
              burstSummarizingSeconds="300" bsCountInSubject="S" bsMessageMaskDigits="true"
              bsExceptionOrigin="true" >
          <PatternLayout pattern="-- %d  %p  %c [%.20t,%x]  %m%n" charset="UTF-8" />      <!-- SMTP uses fixed charset for message -->
      </SMTPx>
      <Async name="AsyncErrorMail" blocking="false" errorRef="Console">
          <AppenderRef ref="ErrorMail"/>
      </Async>
      

      另见https://issues.apache.org/jira/browse/LOG4J2-1192

      【讨论】:

      • 请添加有关您的解决方案的更多信息。答案应该是独立的,链接作为附加信息。当所有相关信息都在链接源中时,答案很可能会被删除。
      猜你喜欢
      • 2013-06-04
      • 1970-01-01
      • 2023-01-09
      • 2011-03-06
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2021-08-25
      相关资源
      最近更新 更多