Приложение Java: заставить Log4j работать в среде Eclipse - PullRequest
12 голосов
/ 18 января 2012

Я приложил все усилия, чтобы настроить 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

В Eclipse я это так:

Запустить конфигурации -> Путь к классу (вкладка) -> , щелкнуть правой кнопкой мыши на Записи пользователя -> Добавить «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 и не печатает в файл.

Буду признателен за любые предположения о том, что я могу делать неправильно.

Ответы [ 5 ]

17 голосов
/ 18 января 2012

Может быть другой файл log4j.properties или log4j.xml в пути к классам перед вашим log4j.properties. Откройте конфигурацию запуска для своего проекта и добавьте -Dlog4j.debug=true в качестве аргумента виртуальной машины для своего проекта. Это заставит log4j выводить на консоль много дополнительной информации, включая файл конфигурации, который она использует.

3 голосов
/ 20 декабря 2012

Если вы используете фасад ведения журнала slf4j , то вам необходимо указать один бэкэнд регистрации, включив соответствующий файл JAR для этого бэкэнда.В вашем случае вы установили slf4j-jdk14-x.x.x.jar на ваш classpath, который является просто общим бэкендом для регистратора.

Чтобы использовать бэкэнд log4j , вам нужно удалить slf4j-jdk14-x.x.x.jar изамените его на slf4j-log4j12-x.x.x.jar.Если вы не удалите его, slf4j должен выбрать только один внутренний jar, и, вероятно, не тот, который вам нужен.

Конечно, вам также понадобится фактический файл log4j-x.x.x.jar на вашем пути к классам.

Как только эти jar-файлы правильно установлены, параметр VM -Dlog4j.debug будет фактически работать и будет полезен при отладке, откуда приходят ваши настройки регистрации.

2 голосов
/ 18 января 2012

Вы должны указать свой код, чтобы использовать файл свойств.Прежде чем вести какую-либо запись, поставьте

PropertyConfigurator.configure("log4j/log4j.properties");
0 голосов
/ 24 июня 2015

удалите jre (Системная библиотека JRE) проекта в свойствах пути проекта / вкладке библиотеки и установите jre снова!

0 голосов
/ 07 мая 2013

У вас может быть старая версия в вашей целевой директории. Очистите проект и попробуйте снова.

Кроме того, вы должны убедиться, что вы обновили проект eclipse , если вы не добавили log4j.properties через eclipse.

...