Приложение Java: запуск Log4j для работы в среде Eclipse
Я сделал все возможное, чтобы настроить eclipse и приложение Java для использования файла log4j.properties. Однако, похоже, он не использует файл свойств, и я не уверен, почему.
Библиотеки: slf4j-api-1.6.1, slf4j-jdk14-1.6.1
В приложении приложение работает отлично. Я могу печатать информацию, предупреждения и ошибки в консоли eclipse.
То, что я хотел бы сделать, это изменить уровень журнала для отладки и печати всех сообщений журнала как на консоли, так и в файле журнала.
Я создал файл log4j.properties, который выглядит так:
log4j.rootLogger=DEBUG,console,file
log4j.rootCategory=DEBUG, R, O
# Stdout
log4j.appender.O=org.apache.log4j.ConsoleAppender
# File
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=log4j.log
# Control the maximum log file size
log4j.appender.R.MaxFileSize=100KB
# Archive log files (one backup file here)
log4j.appender.R.MaxBackupIndex=5
log4j.appender.file.File=checkLog.log
log4j.appender.file.threshold=DEBUG
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.O.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n
log4j.appender.O.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n
Структура моего каталога выглядит следующим образом:
My Project
--src/
----MYProject/
------*.java
--bin/
----MYProject/
------*.class
--log4j/
----log4j.properties
В затмении я пошел:
Run Configurations → Classpath (вкладка) → Щелкните правой кнопкой мыши на "User Entries" → Добавлено "log4j" в качестве новой папки "и сохранено.
Затем в моем коде я вызываю регистратор следующим образом (пример кода, чтобы продемонстрировать мой подход, чтобы он мог иметь синтаксические ошибки):
package MYProject;
import org.slf4j.LoggerFactory;
public class MyClass{
final org.slf4j.Logger test_logger = LoggerFactory.getLogger(MyClass.class);
public MyClass(){}
public someMethod(){
test_logger.debug("Some Debug");
test_logger.info("Some Info");
test_logger.warn("Some Warning");
test_logger.error("An Error");
}
}
Затем я вызываю someMethod и печатает INFO, WARN, ERROR на консоли eclipse. Он не будет печатать DEBUG и не будет печатать в файл.
Буду признателен за любые предложения о том, что я могу делать неправильно.
Ответы
Ответ 1
Может быть другой файл log4j.properties
или log4j.xml
в пути к классам перед вашим log4j.properties
. Откройте конфигурацию запуска для своего проекта и добавьте -Dlog4j.debug=true
в качестве аргумента VM для вашего проекта. Это даст команду log4j напечатать много дополнительной информации на консоли, включая файл конфигурации, который он использует.
Ответ 2
Если вы используете фасад ведения журнала slf4j, вам нужно указать ровно один бэкэнд ведения журнала, включив соответствующий файл jar для этого бэкэнд. В вашем случае вы установили slf4j-jdk14-x.x.x.jar
в свой путь к классам, который является всего лишь общим бэкэндом регистратора.
Чтобы использовать бэкэнд log4j, вам нужно удалить slf4j-jdk14-x.x.x.jar
и заменить его на slf4j-log4j12-x.x.x.jar
. Если вы не удалите его, slf4j должен выбрать только одну бэкэнд-банку и, возможно, не тот, который вам нужен.
Конечно, вам также понадобится фактический log4j-x.x.x.jar
файл в вашем пути к классам.
Как только эти банки правильно встанут, параметр VM -Dlog4j.debug
будет работать и будет полезен при отладке, из которой происходят ваши конфигурации ведения журнала.
Ответ 3
Вам нужно указать вашему коду, чтобы использовать файл свойств. Прежде чем выполнить какие-либо протоколирования, поместите
PropertyConfigurator.configure("log4j/log4j.properties");
Ответ 4
У вас может быть старая версия в вашем целевом каталоге.
Очистите проект и повторите попытку.
Кроме того, вы должны убедиться, что обновите проект eclipse, если вы не добавили log4j.properties через eclipse.
Ответ 5
удалить jre (JRE System Library) проекта в свойствах проекта/вкладке библиотеки путей и снова установить jre!