尝试使用SMTP Appender时出现工厂错误



下午好,

当我尝试使用SMTP Appender时,我在控制台中得到一个奇怪的错误。错误似乎是在加载XML文件时发生的,因为除了标准输出之外,它没有通过任何输出流进行记录。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 ERROR无法调用类org.apache.logging.log4j.core.appender中的工厂方法。SMTP元素的SmtpAppender。java.lang.reflect.InvocationTargetException在sun.reflect.NativeMethodAccessorImpl。invoke0(本地方法)在sun.reflect.NativeMethodAccessorImpl。调用(未知源)在sun.reflect.DelegatingMethodAccessorImpl。调用(未知源)在java.lang.reflect.Method。调用(未知源)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)at(我们的日志接口类,它本质上只是返回Apache日志管理器传递的日志)at(全局变量定义文件,第一个使用getLogger的方法)at(我们软件的主要方法,在这里加载全局变量)产生原因:java.lang.NoSuchMethodError: javax.mail.Session.setProtocolForAddress(Ljava/lang/String;Ljava/lang/String;)Vorg.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 ERROR在appeners中为SMTP返回空对象。2015-05-19 19:08:18 819 ERROR无法找到日志记录器fatalerror的appender Mailer

配置的细节是正确的(我知道这是一个有效的IP等)-他们在log4j 1中工作。错误日志几乎没有告诉我任何关于错误的信息,所以我希望有人以前听说过这个。谢谢大家!

这是stacktrace中重要的一行:

原因:java.lang.NoSuchMethodError: javax.mail.Session.setProtocolForAddress(Ljava/lang/String;Ljava/lang/String;)V

自1.4版以来,setProtocolForAddress方法一直是JavaMail的一部分,因此这对我来说表明您正在使用该JAR的旧版本。如果是,请尝试升级到更高版本。

请注意,log4j2有许多查找,而不仅仅是系统属性。因此,您需要将${hostName}转换为${sys:hostName},如果您正在使用IP地址查找,这可能是问题的原因。(尝试硬编码所有查找值以排除这种可能性。)

最新更新