1

我已将 Tomcat 配置为使用 SLF4J/logback 进行所有日志记录。我在 server/lib/logback.xml 中设置了一个 SMTPAppender。每个错误都会发送一封电子邮件,一切似乎都很好。但是当我关闭 Tomcat 时,出现以下错误:

13:44:14,431 |-INFO in ch.qos.logback.classic.net.SMTPAppender[ERROR_EMAIL] - About to send out SMTP message "ERROR: o.a.c.l.WebappClassLoader - The web application [] appears to have started a thread named [logback-1] but has failed to stop it. This is very likely to create a memory leak."

13:44:14,446 |-ERROR in ch.qos.logback.classic.net.SMTPAppender[ERROR_EMAIL] - Error occurred while sending e-mail notification. javax.mail.MessagingException: IOException while sending message;

nested exception is:
javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed; 
boundary="----=_Part_2_1458580013.1444423454431"
at javax.mail.MessagingException: IOException while sending message
at  at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1177)
at  at javax.mail.Transport.send0(Transport.java:195)
at  at javax.mail.Transport.send(Transport.java:124)
at  at ch.qos.logback.core.net.SMTPAppenderBase.sendBuffer(SMTPAppenderBase.java:394)

配置如下所示:

<appender name="ERROR_EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
        <!-- guarantees that only logs of ERROR will be emailed -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>

        <asynchronousSending>true</asynchronousSending>
        <includeCallerData>true</includeCallerData>

        <smtpHost>xyz.company.com</smtpHost>
        <smtpPort>25</smtpPort>
        <STARTTLS>false</STARTTLS>

        <to>me@company.com</to>
        <from>administrator@company.com</from>

        <subject>ERROR: %logger{20} - %m</subject>

        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%date %-5level %logger{35} - %message%n</pattern>
        </layout>  

    </appender>

所有电子邮件实际上都是在关闭前几分钟发送的。错误消息仅在我关闭服务器时出现。我试过mail.jar(1.4.5版)和javax.mail-1.5.4.jar。

我在 Windows 7 上运行带有 Java 7 JDK 的 Tomcat 7 作为服务。我正在使用 SLF4J 1.7.12 和 logback 1.1.3。只有一个 Web 应用程序并且其中没有邮件 jar(我在 Web 应用程序 lib 文件夹中放置了一个 mail.jar 文件以测试类加载器问题,但是错误电子邮件没有正文)

我已经尝试过但未能弄清楚为什么它首先会出现 mime 错误。我尝试添加activation.jar 1.1 版,但没有帮助。

现在,当我发布此内容并预计会发生一些火灾时,我在想我应该创建一个非常简单的 Web 应用程序,该应用程序只记录错误并消除可能发生的任何 web-inf/lib jar 冲突。另外,我需要看看是否有某种方法可以使附加程序在发送后刷新,并尝试不发送 ni 异步模式。但在此期间,我感谢任何帮助。

4

1 回答 1

0

web 应用程序上下文被破坏时,你的 web 应用程序应该干净地关闭 logback

一般来说,这no object DCH for MIME type multipart/mixed是由于类加载器迷宫。您可以通过启用来验证这一点-Djavax.activation.debug=true

于 2017-07-14T15:56:51.327 回答