Ошибка фабрики Log4J2 при попытке использовать SMTP Appender
Добрый день,
Когда я пытаюсь использовать 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 ОШИБКА Невозможно вызвать фабричный метод в классе класса org.apache.logging.log4j.core.appender.SmtpAppender для элемента SMTP. java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(неизвестный источник) в sun.reflect.DelegatingMethodAccessorref. неизвестный. неизвестный.Method.invoke(Неизвестный источник) по адресу org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:137) по адресу org.apache.logging.log4j.core.config.AbstractConfiguration.crejectPlugin (AbstractConfiguration.java:766) в org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:706) в org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration (AbstractConfiguration):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.log4.log.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:41) в org.apache.logging.log4j.LogManager.getContext(LogManager.java:175) в org.apache.logging.log4j.LogManagerManLog: 426) в (Наш класс интерфейса лога, который, по сути, просто возвращает журнал, переданный менеджером журналов Apache) в (Файл определения глобальной переменной, первый метод, который использует getLogger) в (Основной метод для нашего программного обеспечения, где глобальные переменные загружаются). Вызывается: 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:2ap.j.log.j.log.j.clog.j.log.j.clog.j.log.dll) или в appender.AbstractManager.getManager(AbstractManager.java:71) в org.apache.logging.log4j.core.net.SmtpManager.getSMTPManager(SmtpManager.java:124) в org.apache.logging.log4j.core.appender.Smp.createAppender(SmtpAppender.java:142) ... еще 21
2015-05-19 19:08:18,814 ОШИБКА Возвращен нулевой объект для SMTP в Appenders. 2015-05-19 19:08:18,819 ОШИБКА Не удалось найти приложение Mailer для регистратора fatalerror
Детали конфигурации верны (я знаю, что это действительный IP-адрес и т. Д.) - они работали в log4j 1. Журнал ошибок практически ничего не говорит об ошибке, поэтому я надеюсь, что кто-то слышал об этом раньше. Спасибо всем!
2 ответа
Это важная строка из вашей трассировки стека:
Вызывается: java.lang.NoSuchMethodError: javax.mail.Session.setProtocolForAddress(Ljava/lang/String;Ljava/lang/String;)V
setProtocolForAddress
Метод входит в состав JavaMail начиная с версии 1.4, поэтому мне кажется, что вы используете старую версию этого JAR-файла. Если вы, попробуйте обновить до более поздней версии.
Обратите внимание, что log4j2 имеет много поисков, а не только системные свойства. Так что вам нужно конвертировать ${hostName}
в ${sys:hostName}
и, если вы используете поиск по IP-адресу, это может быть причиной проблемы. (Попробуйте исключить все значения поиска, чтобы исключить эту возможность.)