изменить файл свойств log4j во время выполнения, чтобы создать пустой журнал по умолчанию - PullRequest
4 голосов
/ 08 ноября 2011

У меня есть приложение, которое использует log4j для входа в текстовый файл, я поместил файл log4j.properties в свой исполняемый jar-файл, содержащий параметры конфигурации журнала по умолчанию.

Мой файл log4j.properties выглядит следующим образом:

log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.File=mylogfile.log
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{dd/MM/yyyy HH\:mm\:ss,SSS} %-5p [%t] - %m%n

Мое приложение также имеет параметр командной строки, который позволяет пользователю изменять имя файла журнала, поэтому у меня есть функция, подобная следующей, которая изменяет настройки log4j во время выполнения:

public void changeLogFileName(String filename) {    
          props.setProperty("log4j.appender.A1","org.apache.log4j.DailyRollingFileAppender");
          props.setProperty("log4j.appender.A1.DatePattern","'-'ddMMyyyy");
          props.setProperty("log4j.appender.A1.File",filename);
          LogManager.resetConfiguration();
          PropertyConfigurator.configure(props);
    }

Все работает нормально, если только оператор LogManager.resetConfiguration () и / или PropertyConfigurator.configure (props) не выполняет пустой файл журнала по умолчанию (mylogfile. журнал) создается автоматически. После этого все, что я регистрирую из моего приложения, будет правильно записано в новом файле, но в любом случае будет создан пустой файл (с именем файла журнала по умолчанию в log4j.properties).

Есть ли способ избежать создания пустого файла журнала по умолчанию?

1 Ответ

1 голос
/ 26 апреля 2013

Я наконец-то разработал библиотеку log4j-дополнения , которая позволяет создавать приложение для инициализации Lazy, которое позволяет избежать создания пустого файла журнала.1006 *

Способ изменения пути

/**
 * Change the path of log file
 * @param path new path
 */
public synchronized void changeLogPath(String path) {
      String filename = (path.endsWith(File.separator)) ? path : path + File.separator;
      filename += LOGFILENAME + "-{timestamp}.log";

      props.setProperty("log4j.appender.A1","org.pollerosoftware.log4j.additions.appenders.TimestampFileAppender");
      props.setProperty("log4j.appender.A1.TimestampPattern","ddMMyyyy");
      props.setProperty("log4j.appender.A1.File",filename);
      LogManager.resetConfiguration();
      PropertyConfigurator.configure(props);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...