Как установить файл свойств log4j?

У меня есть проект Java Eclipse, который использует log4j. Я не могу установить файл конфигурации log4j для доступа по пути к файлу. Я должен экспортировать и запускать проект в банке.

Вот как я пытаюсь:

public class Wita {
  static Logger logger;
  public static void main(String[] args) {
    System.setProperty("log4j.configuration", new File("").getCanonicalPath()+File.separatorChar+"resources"+File.separatorChar+"log4j.xml" );
    // System.out.println( System.getProperty("log4j.configuration") );
    logger = Logger.getLogger(Wita.class.getName());
  }
}

System out печатает C:\Users\roncsak\eclipse_workspace\WITA\resources\log4j.xml, что хорошо. WITA является базовой папкой проекта. Но при запуске проекта с аргументом -Dlog4j.debug также возвращаются следующие данные:

log4j: Trying to find [C:\Users\roncsak\eclipse_workspace\WITA\resources\log4j.xml] using context classloader [email protected]
log4j: Trying to find [C:\Users\roncsak\eclipse_workspace\WITA\resources\log4j.xml] using [email protected] class loader.
log4j: Trying to find [C:\Users\roncsak\eclipse_workspace\WITA\resources\log4j.xml] using ClassLoader.getSystemResource().
log4j: Could not find resource: [C:\Users\roncsak\eclipse_workspace\WITA\resources\log4j.xml].

Я хотел бы изменить log4j.xml с течением времени, не создавая еще один файл jar. Как я могу это сделать?

Ответ 1

В разделе "Процедура инициализации по умолчанию" по адресу http://logging.apache.org/log4j/1.2/manual.html:

  • Установите переменную строки ресурса в значение свойства системы log4j.configuration. Предпочтительный способ указать файл инициализации по умолчанию - это свойство системы log4j.configuration. Если системное свойство log4j.configuration не определено, установите для ресурса строковой переменной значение по умолчанию "log4j.properties".
  • Попытайтесь преобразовать переменную ресурса в URL.
  • Если переменная ресурса не может быть преобразована в URL-адрес, например, из-за ошибки MalformedURLEx, найдите ресурс из пути к классам, вызвав org.apache.log4j.helpers.Loader.getResource(resource, Logger.class), который возвращает URL-адрес, Обратите внимание, что строка "log4j.properties" представляет собой неверный URL. См. Loader.getResource(java.lang.String) для списка найденных местоположений.

Поэтому вам нужно добавить file: к log4j.configuration свойства log4j.configuration, чтобы его можно было рассматривать как URL.

См. fooobar.com/questions/56625/....

Даже лучший код:

    System.setProperty("log4j.configuration", new File("resources", "log4j.xml").toURL());

Ответ 2

Вы можете установить аргумент VM: -Dlog4j.configuration='path_to_log4j.xml'

или программно:

String logFilePath = new File(<path_to_log4j.xml>);
if (logFilePath == null || "".equalsIgnoreCase(logFilePath)) {
    URL file = this.getClass().getResource(DEFAULT_CONF);
    DOMConfigurator.configure(file);
} else {
    DOMConfigurator.configure(<default_config_file>);   
}

Ответ 3

Все эти ответы выше не удовлетворяли, поэтому я отправляю сюда кого-то, кому это может понадобиться в будущем:

  1. Вам нужно указать, где находится ваше имущество. Либо по программе, либо по команде опция прекрасна.

Programatically:

private static void setupLog4J(){
    try {
        System.setProperty("log4j.configuration", new File(".", File.separatorChar+"log4j.properties").toURL().toString());
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
  1. Создайте свой собственный файл log4j.properties:

#  Logging level
# 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

Надеюсь это поможет.