Java-Приложение: Получение Log4j Для Работы В Среде Eclipse

я сделал все возможное, чтобы настроить Eclipse и Java-приложение, чтобы использовать . Однако, похоже, он не использует файл свойств, и я не уверен, почему.

библиотеки: 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 я это так:

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


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


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

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

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

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


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

PropertyConfigurator.configure("log4j/log4j.properties");

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

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


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