Использование внешней службы или агента для регистрации всех обращений к файлам и обработки, выполненной моим веб-приложением Java?

Я работаю над поддержкой веб-приложения 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 или нет (требуется глубокая нетестируемость каждого потока кода)

ЖЕЛАЕМОЕ РЕШЕНИЕ

Регистрируйте все файлы, записанные или прочитанные нашим приложением, с отметками времени через внешний агент или приложение.

Существуют ли какие-либо внешние агенты или приложения, которые могут регистрировать все действия по доступу к файлам, выполняемые процессом или приложением на сервере?


person Shaurya Sisodia    schedule 18.10.2020    source источник


Ответы (1)


Есть несколько вещей, которые вы могли бы сделать. Что лучше, зависит от вашего приложения.

  1. Узнайте, почему файлы повреждаются, и устраните эту проблему.
  2. Имейте этап проверки конфигурации при запуске приложения, который проверяет все ваши файлы конфигурации, чтобы убедиться, что они являются допустимыми XML. Это избавляет от необходимости перехватывать исключения, когда ваш существующий код считывает конфигурацию.
  3. Оберните все классы java.io, которые вы используете, чтобы они регистрировали доступ без изменения вашего существующего кода (кроме изменения операторов импорта).

Я уверен, что есть и другие подходы.

person tgdavies    schedule 18.10.2020
comment
Файлы конфигурации обычно портятся из-за того, что клиенты неправильно их редактируют. У нас есть доменный язык, созданный из пользовательских тегов xml, поэтому клиент может использовать подключаемую логику в нашем большом веб-приложении. Я согласен и с двумя другими предложениями. Но нет ли способа просто регистрировать доступ к файлам, сделанный любым приложением. Мне это кажется правдоподобным, поскольку доступ к файлам - это процессы ОС, и мы могли бы войти в него. - person Shaurya Sisodia; 18.10.2020