java - Tomcat 下的 Logback SMTP Appender 内存泄漏

标签 java tomcat logback mime smtpappender

我已将 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-inf/lib jar 冲突。另外,我需要查看是否有某种方法可以使 appender 在发送后刷新并尝试不发送 ni 异步模式。但在此期间,我感谢任何帮助。

最佳答案

您的网络应用应该 cleanly shutdown logbackweb application context is destroyed .

通常,MIME 类型 multipart/mixed 的无对象 DCH 是由于 classloader maze .您可以通过启用 -Djavax.activation.debug=true 来验证这一点

关于java - Tomcat 下的 Logback SMTP Appender 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33047223/

相关文章:

java - 从 Matlab 到网络

eclipse - 使用 excel 数据源在 tomcat 中部署 birt 查看器

tomcat - jruby 运行时和 tomcat

java - 如何使我的 Java Web 应用程序在根 URL 上可用?

java - logback:TimeBasedRollingPolicy 每日滚动工作,但所有旧日志文件都被删除

java - 如何从 AES-256 切换到 AES-128?

java - MS Edge Chromium Webdriver 从 79.309.12 开始崩溃

java - AWS 无服务器请求 - JSON body/httpMethod 始终为 null

java - 使用 JMS 和 logback 的分布式日志记录

java - 将 perf4j 性能统计数据公开给 JMX 不起作用