Пожалуйста, правильно инициализируйте систему log4j. При запуске веб-службы
Может быть, это глупо спрашивать об этом, но я смущен. Я ссылался на Конфигурирование свойства Log4j, но, похоже, не помогает.
Я написал простой веб-сервис HelloWorld. И при запуске я получаю ошибку примерно так:
log4j: WARN Для журнала не найдено ни одного приложения (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
.
Любая помощь по этому поводу?
Ответы
Ответ 1
Эти сообщения являются чем-то сложным, достаточно, чтобы люди создали это, чтобы сделать его более ясным:
https://issues.apache.org/bugzilla/show_bug.cgi?id=25747
Какая сложность в них заключается в том, что предупреждения записываются, если Log4j не может найти файл log4j.properties
(или log4j.xml
), но также и файл в порядке и dandy, но его содержимое не завершено из точки конфигурации зрения.
Следующий абзац взят отсюда:
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 не имеет целевого задания регистрации по умолчанию. Пользователь несет ответственность за то, чтобы все категории могли наследовать приложение. Это может быть легко достигнуто путем присоединения приложения к корневой категории.
Вы можете найти информацию о том, как настроить корневой журнал (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
Это должно очистить те сообщения WARN, которые вы получаете при запуске (убедитесь, что у вас еще нет приложения с именем stdout
; также обратите внимание на уровень, который вы даете корневому журналу, debug
будет очень многословным, и каждая библиотека в вашем приложении начнет писать материал на консоль).
Как о log4j.properties
/log4j.xml
, я предлагаю разместить этот файл в /WEB-INF/classes
, так как важно иметь его для различных настроек (активирование/дезактивация журналов, изменение уровней журналов и т.д.). Вы также можете использовать его внутри JAR в classpath (как указано в вашем комментарии), но он будет заключен в архив (надеюсь, в нужном месте внутри архива) и будет не так прост в обращении, как если бы он были в /WEB-INF/classes
.
Ответ 2
Вам нужно создать свой собственный log4j.properties
в папке пути к классу.
Ответ 3
Хорошо, если вы уже создали log4j.properties, вы добавили бы свой путь к пути к классам, чтобы он был найден во время выполнения.
Да, thingy будет искать этот файл в пути к классам.
Поскольку вы сказали, что смотрите в ось и не нашли ее, я предполагаю, что у вас нет log4j.properties, так что здесь грубый, но полный пример.
Создайте его где-нибудь и добавьте в свой путь к классам. Поместите его, например, в c:/proj/resources/log4j.properties
В вашем пути к классу вы просто добавляете.......; 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
Ответ 4
Предупреждение Не найдено никаких добавлений для журнала, что вы используете систему регистрации log4j
, но вы не добавили каких-либо добавок (например, FileAppender, ConsoleAppender, SocketAppender, SyslogAppender и т.д.) в файл конфигурации или отсутствует файл конфигурации.
Существует три способа настройки log4j: с файлом свойств (log4j.properties
), с XML файлом и кодом Java (rootLogger.addAppender(new NullAppender());
).
Если у вас есть файл свойств (например, при установке Solr), вам необходимо поместить этот файл в каталог classpath.
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
Ответ 5
Если приведенный ниже статус присутствует в вашем классе, то ваш файл log4j.properties должен находиться в папке java source (src), если он является исполняемым jar, он должен быть упакован в jar, а не в отдельный файл.
static Logger log = Logger.getLogger(MyClass.class);
Спасибо,