Исправление для log4j ПРЕДУПРЕЖДЕНИЕ Не удалось найти приложения для регистратора. Пожалуйста, правильно инициализируйте систему log4j
Если вы читаете это, вы, должно быть, используете структуру log4j и получили сообщение об ошибке ниже.
log4j:WARN No appenders could be found for logger
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See https://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Предупреждение Log4j об отсутствии приложений появится на консоли для автономных приложений и в журналах сервера для веб-приложений, работающих в каком-либо контейнере сервлетов, таком как Tomcat или JBoss. Может быть несколько причин предупреждения log4j о том, что приложения не найдены, давайте рассмотрим распространенные причины и способы их устранения.
Файл log4j.xml или log4j.properties не находится в пути к классам
<старт=\2\>
Log4j ищет стандартные имена файлов, поэтому, если ваше имя файла конфигурации log4j — myapp-log4j.xml или myapp-log4j.properties, тогда log4j не сможет загрузить его автоматически, и вы получите стандартное предупреждающее сообщение. Для автономного Java-приложения вы можете легко исправить это, настроив его внутри основного метода перед его использованием. Например;
/**
* method to init log4j configurations, should be called first before using logging
*/
private static void init() {
DOMConfigurator.configure("myapp-log4j.xml");
// OR for property file, should use any one of these
//PropertyConfigurator.configure("myapp-log4j.properties");
}
Но вы не можете использовать этот простой подход с веб-приложением, потому что файл конфигурации находится в каталоге WEB-INF/classes. Вы можете выполнить эту настройку через ServletContextListener, как показано в приведенном ниже коде.
public final class Log4jInitListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent paramServletContextEvent) {
}
public void contextInitialized(ServletContextEvent servletContext) {
String webAppPath = servletContext.getServletContext().getRealPath("/");
String log4jFilePath = webAppPath + "WEB-INF/classes/myapp-log4j.xml";
DOMConfigurator.configure(log4jFilePath);
System.out.println("initialized log4j configuration from file:"+log4jFilePath);
}
}
Другой подход — установить системное свойство log4j.configuration с помощью параметров Java, как показано ниже.
-Dlog4j.configuration=file:///path/to/your/myapp-log4j.xml
Платформа Log4j достаточно умна, чтобы использовать DOMConfigurator или PropertyConfigurator на основе расширения файла. Вот и все, log4j прост в использовании, как только вы разберетесь с этими первоначальными проблемами. Использованная литература:
- Процедура инициализации Apache log4j по умолчанию
- Учебное пособие по Log4j для автономного и веб-приложения