我已将 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 logback当web 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/