Я хочу создать и включить приложение для вызова определенного метода 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;
}
}