Пожалуйста, правильно инициализируйте систему log4j.Во время работы веб-службы - PullRequest
22 голосов
/ 07 июля 2011

Может быть, это глупо, но я в замешательстве.Я упомянул Настройка свойства Log4j , но, похоже, это не помогло.

Я написал простой веб-сервис HelloWorld.И во время его работы я получаю сообщение об ошибке, похожее на это:

log4j: ПРЕДУПРЕЖДЕНИЕ. Не удалось найти никаких дополнений для регистратора (org.apache.axis.transport.http.AxisServlet).log4j: WARN Пожалуйста, правильно инициализируйте систему log4j.

Я не уверен, почему это происходит.

Я создаю веб-сервис с использованием Eclipse и развернут в Tomcat 6.0.Я проверяю Руководство разработчика Axis и в соответствии с ними

log4j.configuration = log4j.properties Используйте это системное свойство, чтобы указать имя файла конфигурации Log4J.Если не указан, файл конфигурации по умолчанию - log4j.properties.Файл log4j.properties предоставляется в axis.jar.

Я не нашел log4j.properties в axis.jar.

Любая помощь по этому вопросу?

Ответы [ 5 ]

38 голосов
/ 08 июля 2011

Эти сообщения являются чем-то хитрым, достаточно, чтобы люди создали это, чтобы сделать его более понятным: https://issues.apache.org/bugzilla/show_bug.cgi?id=25747

Что хитро в них, так это то, что предупреждения пишутся, если Log4j не может найти его log4j.properties (или log4j.xml) файла, но также, если файл в порядке, но его содержимое не является полным с точки зрения конфигурации.

Отсюда взят следующий абзац: http://svn.apache.org/repos/asf/logging/log4j/tags/v1_2_9/docs/TROUBLESHOOT.html

Выходные данные записи записываются в цель с помощью приложения.Если ни один из дополнений не присоединен ни к категории, ни к каким-либо из ее предков, при попытке входа в систему вы получите следующее сообщение:

log4j: No appenders could be found for category (some.category.name).
log4j: Please initialize the log4j system properly.

Log4j не имеет цели ведения журнала по умолчанию.Пользователь несет ответственность за то, чтобы все категории могли унаследовать приложение.Этого легко достичь, подключив appender к корневой категории.

Информацию о настройке корневого регистратора (log4j.rootLogger) можно найти в документации log4j ,в основном добавление чего-то такого простого в начале файла:

log4j.rootLogger=debug, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

Это должно очистить те ПРЕДУПРЕЖДАЮЩИЕ сообщения, которые вы получаете при запуске (убедитесь, что у вас еще нет приложенияс именем stdout; также будьте осторожны с тем, какой уровень вы задаете корневому логгеру, debug будет очень многословным, и каждая библиотека в вашем приложении начнет записывать данные в консоль).

Как и в log4j.properties / log4j.xml, я предлагаю вам поместить этот файл в /WEB-INF/classes, так как важно, чтобы он был открыт для различных настроек (активация / деактивация журналов, изменение уровней журналов и т. Д.).Вы также можете иметь его внутри JAR в classpath (как вы указали в своем комментарии), но он будет включен в архив (надеюсь, в нужном месте внутри архива) и не будет таким простым в обращении, как если быбыли в /WEB-INF/classes.

5 голосов
/ 07 июля 2011

Вы должны создать свой собственный log4j.properties в папке classpath.

2 голосов
/ 07 ноября 2015

Ну, если бы вы уже создали свойства log4j.properties, вы бы добавили его путь к пути к классу, чтобы он был найден во время выполнения.
Да, вещь будет искать этот файл в пути к классам.Вы сказали, что посмотрели на ось и не нашли ее, я предполагаю, что у вас нет log4j.properties, так что вот грубый, но полный пример.
Создайте его где-нибудь и добавьте в свой путь к классам.Поместите это, например, в c: /proj/resources/log4j.properties

В вашем classpath вы просто добавляете .......; c: / proj / resources

# Root logger option
log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=c:/project/resources/t-output/log4j-application.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
1 голос
/ 22 июля 2015

Если приведенный ниже статус присутствует в вашем классе, тогда ваши log4j.properties должны быть в папке java source (src), если это исполняемый файл jar, он должен быть упакован в jar, а не в отдельный файл.

static Logger log = Logger.getLogger(MyClass.class);

Спасибо,

0 голосов
/ 09 апреля 2015

Предупреждение Для регистратора не найдено ни одного приложения означает, что вы используете log4j систему ведения журнала, но вы не добавили никаких приложений (таких как FileAppender, ConsoleAppender, SocketAppender, SyslogAppender и т. Д.) В файл конфигурации или отсутствует файл конфигурации.

Существует три способа настройки log4j: с файлом свойств (log4j.properties), с файлом XML и с помощью кода Java (rootLogger.addAppender(new NullAppender());).

Если у вас есть файл свойств (например, при установке Solr), вам нужно поместить этот файл в каталог classpath .

* 1016 путь к классам * Вот несколько командных подсказок, как определить значение вашего classpath: $ echo $CLASSPATH $ ps wuax | grep -i classpath $ grep -Ri classpath /etc/tomcat? /var/lib/tomcat?/conf или с Java: System.getProperty("java.class.path"). 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
...