Поиск по сайту:

Исправление для 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 ищет стандартные имена файлов, поэтому, если ваше имя файла конфигурации 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 для автономного и веб-приложения