Log4j: Создание/изменение приложений во время выполнения, файл журнала воссоздан и не добавлен

Я хочу создать и включить приложение для вызова определенного метода MyMethod(), чей вывод журнала должен идти в файл, присутствующий в "logFilePath".

Я не хочу включать это приложение в файл конфигурации xml, поэтому решил создать его во время выполнения.

Во-первых, я попытался изменить свойства регистратора во время выполнения, а затем вызвал активацию опций, например.установка уровня на DEBUG до и установка его на Off в блоке finally, чтобы выходные данные регистрировались только во время использования метода. Это не сработало.

Моя проблема в том, что appender каждый раз воссоздает файл, а не добавляет к тому же файлу. Это несмотря на то, что setAppend является правдой.

Я не очень хорошо знаком с log4j, поэтому, пожалуйста, не стесняйтесь предлагать альтернативный подход. Ниже приведен пример кода, объясняющий, что я пытаюсь сделать.

private static FileAppender createNewAppender(String logFilePath) {
    FileAppender appender = new FileAppender();
    appender.setName("MyFileAppender");
    appender.setLayout(new PatternLayout("%d %-5p [%c{1}] %m%n"));
    appender.setFile(logFilePath);
    appender.setAppend(true);
    appender.setThreshold(Level.INFO);
    appender.activateOptions();
    Logger.getRootLogger().addAppender(appender);
    return appender;
}

private static void removeAppender() {
    Logger.getRootLogger().removeAppender(fileAppender) ; // ("MyFileAppender");
}

Я вызываю вышеуказанные методы следующим образом:

private static FileAppender fileAppender = null;

private static void myMethod(String logFilePath) {        
    try {
        fileAppender = createNewAppender();
        someOperation();
    }
    finally {
        removeAppender();
        fileAppender=null; 
    }
}
9
задан Abhijeet Kashnia 22 May 2012 в 09:31
поделиться