Я работаю над поддержкой веб-приложения Enterprise Java. Он чрезвычайно настраиваемый, с более чем тысячами файлов конфигурации и определений xml.
Фон
Иногда некоторые файлы конфигурации повреждаются, что приводит к исключению блокировки. Имя файла и путь к файлу обычно не регистрируются в нашей текущей структуре. Чрезвычайно сложно определить на стороне клиента, какой файл конфигурации поврежден, поскольку их тысячи. Итак, мы хотим регистрировать все обращения к файлам и обработку, выполняемую нашим приложением.
Что было сделано. Мы создали два журнала отладки и один журнал ошибок с помощью log4j. -Мы регистрируем каждый доступ к файлу в классах обработки конфигурации или обработки xml. - Мы регистрируем try, чтобы поймать любое исключение, которое может произойти. Это требует ручного рефакторинга кода в сотнях классов.
Код
public static final Logger log = Logger.getLogger(ThisLoggerClass.class);
public static void logConfigFileException(Exception ex , String fileName, String fullPathToFile) {
log.error(" file: [ " + fileName + " ] was either corrupted or not present at [ " + fullPathToFile + " ] causing error: " + ex.getMessage(), ex);
}
public static void logFileAccessForRead(String fileName, String fullPathToFile) {
log.debug("file: [ " + fileName + " ] was read from the location: [ " + fullPathToFile + " ] ");
}
public static void logFileAccessForWrite(String fileName, String fullPathToFile) {
log.debug("file: [ " + fileName + " ] was written to the location: [ " + fullPathToFile + " ] ");
}
}
РЕАЛЬНЫЕ ПРОБЛЕМЫ
Как видно, пришлось вручную реорганизовать тысячи классов, которые обращаются к тысячам файлов, а затем обрабатывают их по-разному.
- Разработчик может пропускать места.
- Чрезмерный try-catch делает код нечитаемым
- Try catch должен быть выполнен с учетом множества вещей, например: например, должен быть переброшен ex или нет (требуется глубокая нетестируемость каждого потока кода)
ЖЕЛАЕМОЕ РЕШЕНИЕ
Регистрируйте все файлы, записанные или прочитанные нашим приложением, с отметками времени через внешний агент или приложение.
Существуют ли какие-либо внешние агенты или приложения, которые могут регистрировать все действия по доступу к файлам, выполняемые процессом или приложением на сервере?