Рубрики
Без рубрики

Исправление для log4j ПРЕДУПРЕЖДЕНИЕ Для регистратора не удалось найти никаких приложений, пожалуйста, правильно инициализируйте систему log4j

Как исправить log4j предупреждение Для регистратора не удалось найти никаких приложений, пожалуйста, правильно инициализируйте систему log4j, используя путь к классу, log4j.конфигурация, веб-приложение

Автор оригинала: Pankaj Kumar.

Если вы читаете это, вы, должно быть, используете платформу 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 предупреждает, что приложения не найдены, давайте рассмотрим общие причины и способы их устранения.

  1. log4j.xml или файл log4j.properties не находится в пути к классу

Это самая распространенная причина, по которой фреймворк log4j ищет log4j.xml или файл log4j.properties в пути к классу вашего приложения. Если у вас есть приложение на основе maven, вы можете создать исходную папку и поместить туда файлы конфигурации, как показано на рисунке ниже.

Если вы используете log4j в веб-приложениях, проверьте наличие этого файла конфигурации в каталоге WEB-INF/classes . Если его там нет, проверьте, правильно ли настроены ваши исходные папки.

  1. имя файла конфигурации 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 system с помощью параметров java, как показано ниже.

-Dlog4j.configuration=file:///path/to/your/myapp-log4j.xml

Платформа Log4j достаточно умна, чтобы использовать DOMConfigurator или PropertyConfigurator в зависимости от расширения файла.

Вот и все, log4j прост в использовании, как только вы разберетесь с этими начальными проблемами.

Список литературы :