【发布时间】:2015-05-19 19:21:50
【问题描述】:
下午好,
当我尝试使用 SMTP Appender 时,我在控制台中收到一个奇怪的错误。加载 XML 文件时似乎会发生该错误,因为它没有通过除 stdout 之外的任何输出流进行记录。 appender 的内容如下(我已经确认错误在这个 XML 块中)。我已经删除了我们的服务器信息。
<SMTP name="Mailer">
<Subject>[ERROR] (software name) on ${hostName} has thrown a fatal error</Subject>
<To>(a valid email in the form of a@a.com)</To>
<From>(a valid email in the form of a@a.com)</From>
<SMTPHost>(The Internal IP address of a server in the form of 192.168.0.1)</SMTPHost>
<SMTPPort>587</SMTPPort>
<BufferSize>512</BufferSize>
</SMTP>
无论它是否在记录器中被引用,在运行程序并从日志管理器运行 getLogger 时,我都会立即收到以下错误。我删除了几个文件名,并将它们替换为该文件当时正在做什么的粗略描述。
2015-05-19 19:08:18,812 错误无法为元素 SMTP 调用类 org.apache.logging.log4j.core.appender.SmtpAppender 中的工厂方法。 java.lang.reflect.InvocationTargetException 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:137) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:766) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:706) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:698) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:358) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:161) 在 org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:361) 在 org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:426) 在 org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:442) 在 org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:138) 在 org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:147) 在 org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:41) 在 org.apache.logging.log4j.LogManager.getContext(LogManager.java:175) 在 org.apache.logging.log4j.LogManager.getLogger(LogManager.java:426) 在(我们的日志接口类,它本质上只是返回 Apache 日志管理器传递的日志) at(全局变量定义文件,第一种使用getLogger的方法) at(我们软件的主要方法,加载全局变量的地方) 引起:java.lang.NoSuchMethodError: javax.mail.Session.setProtocolForAddress(Ljava/lang/String;Ljava/lang/String;)V 在 org.apache.logging.log4j.core.net.SmtpManager$SMTPManagerFactory.createManager(SmtpManager.java:325) 在 org.apache.logging.log4j.core.net.SmtpManager$SMTPManagerFactory.createManager(SmtpManager.java:299) 在 org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:71) 在 org.apache.logging.log4j.core.net.SmtpManager.getSMTPManager(SmtpManager.java:124) 在 org.apache.logging.log4j.core.appender.SmtpAppender.createAppender(SmtpAppender.java:142) ... 21 更多
2015-05-19 19:08:18,814 错误为附加程序中的 SMTP 返回空对象。 2015-05-19 19:08:18,819 错误无法找到用于记录器致命错误的附加程序邮件程序
配置的细节是正确的(我知道它是一个有效的 IP 等)——它们在 log4j 1 中工作。错误日志几乎没有告诉我有关错误的任何信息,所以我希望有人以前听说过这个。谢谢大家!
【问题讨论】:
-
你需要把
${hostName}改成${sys:hostName}。 -
很好,但这实际上不是我们的问题。这是该软件使用的邮件 API 多年未更新。
标签: java email logging log4j2 smtpappender