Согласно Страница часто задаваемых вопросов по Apache Log4j :
Почему я вижу предупреждение о том, что "не найдены приложения для регистратора" и "Пожалуйста, правильно настройте log4j"?
Это происходит, когда конфигурации по умолчанию файлы log4j.properties
и log4j.xml
не могут быть найдены и приложение не выполняет явную настройку. log4j
использует Thread.getContextClassLoader().getResource()
для поиска файлов конфигурации по умолчанию и напрямую не проверяет файловую систему. Знание подходящего места для размещения log4j.properties или log4j.xml
требует понимания стратегии поиска используемого загрузчика классов. log4j
не предоставляет конфигурацию по умолчанию, поскольку вывод в консоль или в файловую систему может быть запрещен в некоторых средах.
В основном предупреждение Не найдено ни одного добавочного файла для регистратора означает, что вы используете log4j
систему ведения журнала, но вы не добавили никаких дополнительных (таких как FileAppender, ConsoleAppender, SocketAppender, SyslogAppender и т. Д.) В файл конфигурации или отсутствует файл конфигурации.
Существует три способа настройки log4j: с помощью файла свойств (log4j.properties
), с XML-файлом и с помощью кода Java (rootLogger.addAppender(new NullAppender());
).
log4j.properties
Если у вас есть файл свойств (например, при установке Solr), вам нужно поместить этот файл в каталог classpath .
1039 * классы *
Вот несколько советов команд в Linux, как определить значение вашего classpath:
$ echo $CLASSPATH
$ ps wuax | grep -i classpath
$ grep -Ri classpath /etc/tomcat? /var/lib/tomcat?/conf /usr/share/tomcat?
или с Java: System.getProperty("java.class.path")
.
Log4j XML
Ниже приведен базовый XML-файл конфигурации для log4j в формате XML:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
</layout>
</appender>
<root>
<priority value ="debug" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
Tomcat
Если вы используете Tomcat, вы можете поместить log4j.properties
в папку /usr/share/tomcat?/lib/
или /var/lib/tomcat?/webapps/*/WEB-INF/lib/
.
Solr
Для справки, по умолчанию Solr log4j.properties
файл выглядит так:
# Logging level
solr.log=logs/
log4j.rootLogger=INFO, file, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n
#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex=9
#- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n
log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop=WARN
# set to INFO to enable infostream log messages
log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF
Почему log4j не может найти мой файл свойств в приложении J2EE или WAR?
Краткий ответ: классы log4j и файл свойств не входят в сферу действия одного и того же загрузчика классов.
Log4j использует только механизм Class.forName()
по умолчанию для загрузки классов. Ресурсы обрабатываются аналогично. См. Документацию для java.lang.ClassLoader
для более подробной информации.
Итак, если у вас возникли проблемы, попробуйте загрузить класс или ресурс самостоятельно. Если вы не можете найти его, ни один не будет log4j. ;)
Смотри также: