Я работаю над веб-приложением, и у меня есть требование для создания файлов журнала во время выполнения для моего процесса impex. Вот пример использования
Я проверяю файл XML, и ошибка проверки обрабатывается пользовательским обработчиком ошибок. Эта ошибка hanlde будет передана в базовый валидатор (Jaxb 2.x validator), поэтому мне нужно создать файл журнала, когда экземпляр этого обработчика ошибок создается
мы используем log4j в качестве API логирования
вот код для создания файла журнала во время выполнения
XMLErrorHandler<Object> errorHandler=new XMLErrorHandler<Object>(logFileLocation);
logFileName=errorHandler.getLogFileName();
validator.setErrorHandler(errorHandler);
validator.validate(source);
я создаю файл журнала внутри конструктора XMLErrorHandler, так как это единственная точка, которой я могу управлять здесь, это код для создания файла журнала
FileAppender appender;
try {
appender = new FileAppender(layout, sb.toString(), false);
log.addAppender(appender);
log.setAdditivity(false);
log.setLevel(Level.WARN);
} catch (IOException e) {
e.printStackTrace();
}
все работает нормально, файл создается правильно и записывается регистратором в соответствующее место.
но если я перезагружаю свой сервер, начинается настоящая проблема, и регистратор начинает добавлять содержимое журнала не только в свой текущий файл журнала, но также и для всех файлов, создаваемых для этого процесса во время работы сервера. Вот подробности
Предположим, у меня уже есть 3 файла журнала (A, B, C), которые уже находятся в этом месте, по 3 строки в каждом файле журнала, а C был последним файлом, созданным в процессе.
поэтому, когда я перезагружаю свой сервер (под рестартом я имею в виду, что я остановил tomcat из консоли), это как-то добавляет данные в предыдущие файлы всех журналов в этой фашине.
C имеет еще 3 строки
B теперь имеет 6 строк
А теперь имеет 9 строк
Похоже, что созданный мной appender все еще открыт или имеет ссылку, не уверен, что именно происходит.
любая помощь в этом отношении будет полезна.