Автор оригинала: 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 предупреждает, что приложения не найдены, давайте рассмотрим общие причины и способы их устранения.
log4j.xml или файл log4j.properties не находится в пути к классу
Это самая распространенная причина, по которой фреймворк log4j ищет log4j.xml или файл log4j.properties в пути к классу вашего приложения. Если у вас есть приложение на основе maven, вы можете создать исходную папку и поместить туда файлы конфигурации, как показано на рисунке ниже.
Если вы используете log4j в веб-приложениях, проверьте наличие этого файла конфигурации в каталоге WEB-INF/classes . Если его там нет, проверьте, правильно ли настроены ваши исходные папки.
- имя файла конфигурации 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 прост в использовании, как только вы разберетесь с этими начальными проблемами.
Список литературы :
- Процедура инициализации Apache log4j по умолчанию
- Учебник Log4j для автономного и веб – приложения