2015-05-19 6 views
0

Добрый день,Log4J2 Factory Ошибка при попытке использовать 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 [email protected])</To> 
    <From>(a valid email in the form of [email protected])</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 Unable to invoke factory method in class class org.apache.logging.log4j.core.appender.SmtpAppender for element SMTP. java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:137) at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:766) at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:706) at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:698) at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:358) at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:161) at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:361) at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:426) at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:442) at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:138) at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:147) at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:41) at org.apache.logging.log4j.LogManager.getContext(LogManager.java:175) at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:426) at (Our Log Interface Class, which essentially just returns the log passed by the Apache log manager) at (The global variable definition file, the first method to use getLogger) at (The main method for our software, where the globals are loaded) Caused by: java.lang.NoSuchMethodError: javax.mail.Session.setProtocolForAddress(Ljava/lang/String;Ljava/lang/String;)V at org.apache.logging.log4j.core.net.SmtpManager$SMTPManagerFactory.createManager(SmtpManager.java:325) at org.apache.logging.log4j.core.net.SmtpManager$SMTPManagerFactory.createManager(SmtpManager.java:299) at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:71) at org.apache.logging.log4j.core.net.SmtpManager.getSMTPManager(SmtpManager.java:124) at org.apache.logging.log4j.core.appender.SmtpAppender.createAppender(SmtpAppender.java:142) ... 21 more

2015-05-19 19:08:18,814 ERROR Null object returned for SMTP in Appenders. 2015-05-19 19:08:18,819 ERROR Unable to locate appender Mailer for logger fatalerror

Детали конфигурации являются правильными (я знаю, что это действительный IP, и т.д.) - они работали в log4j 1. Журнал ошибок говорит мне практически ничего об ошибке, так что я надеюсь, что кто-то слышал это раньше. Всем спасибо!

+0

Вам нужно изменить '$ {hostName}' на '$ {sys: hostName}'. –

+0

Хорошая добыча, но на самом деле это была не наша проблема. Это был почтовый API, который использовал программное обеспечение, не обновлялось годами. –

ответ

1

Это важное направление от вашего StackTrace:

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

setProtocolForAddress method была частью JavaMail, начиная с версии 1.4, так что это наводит меня на мысль, что вы используете старую версию этого файла JAR. Если да, попробуйте перейти на более позднюю версию.

+0

Точно, что это было, спасибо. Я считал само собой разумеющимся, что в нашем программном обеспечении есть почтовая функция, и я никогда не думал проверять, когда последний раз обновлялась библиотека (подсказка: это было не так) –

0

Обратите внимание, что log4j2 имеет множество поисков, а не только свойства системы. Поэтому вам нужно преобразовать ${hostName} в ${sys:hostName}, и если вы используете поиск по IP-адресу, это может быть причиной проблемы. (Попробуйте hardcoding все значения поиска, чтобы исключить эту возможность.)

+0

Фактически это была устаревшая версия JavaMail, но спасибо за предложение в любом случае ! –

Смежные вопросы