Chcę utworzyć i włączyć program dostarczający dla konkretnej metody wywołania MyMethod(), którego wynik logu powinien przejść do pliku znajdującego się w "logFilePath" .Log4j: Tworzenie/modyfikowanie aplikacji w czasie wykonywania, odtworzenie pliku dziennika i niepowiązanie
Nie chcę dołączać tego aplikatora do pliku konfiguracyjnego xml, więc pomyślałem o utworzeniu go w czasie wykonywania.
Po pierwsze, próbowałem zmodyfikować właściwości rejestratora w środowisku wykonawczym, a następnie wywołać metodę activateOptions, np. ustawienie poziomu DEBUG przed i ustawienie go na Off w bloku finally, tak aby dane wyjściowe były rejestrowane tylko wtedy, gdy metoda jest w użyciu. To nie zadziałało.
Moim problemem jest to, że appender odtwarza plik za każdym razem i nie dołącza do tego samego pliku. To jest nieważne, że setAppend jest prawdziwe.
Nie znam log4j, więc proszę sugerować alternatywne podejście. Poniżej przedstawiono przykładowy kod wyjaśniający, co próbuję.
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");
}
Wzywam powyższe metody w następujący sposób:
private static FileAppender fileAppender = null;
private static void myMethod(String logFilePath) {
try {
fileAppender = createNewAppender();
someOperation();
}
finally {
removeAppender();
fileAppender=null;
}
}