Клиент хочет, чтобы мы «регистрировали» «действия», которые пользователь выполняет в нашей системе: в основном создание, удаление и обновление. У меня уже есть аспект, который регистрирует трассировку, но он работает на довольно низком уровне, регистрируя каждый вызов метода. Итак, если пользователь нажмет кнопку «открыть медицинскую карту», журнал будет читать:
а желаемый результат:
Я думаю об инструменте действий Struts2 с помощью операторов журнала, но мне интересно ... есть ли другой способ сделать это? Я мог бы снова использовать AspectJ (или фильтр) и сохранить логику только в одном месте, чтобы я мог легко настроить журнал, но тогда, боюсь, все станет труднее понять (т.е. «журнал для этого действия неверен. ... где, черт возьми, мне искать проблему? ").




Я недавно обработал журналы, чтобы создать сводку. Вы можете рассмотреть этот подход, особенно если # 2 и # 3 в приведенных выше журналах генерируются в разных местах, и для получения желаемого результата потребуется переносить состояние из одного места в другое.
Рад, что смог быть полезным. Я немного не решался писать, зная очень мало или совсем ничего о Struts и AspectJ :-)
Если вы работаете с медицинскими данными, вы можете рассмотреть возможность ведения журнала и управления версиями. Я бы даже подумал об этом с триггерами базы данных. Я не очень много занимаюсь программированием на Java, но я обсуждал именно эту проблему с нашей командой по информационной системе для учащихся. Они используют Oracle на сервере и регистрируют переменную сеанса в своих соединениях. Их триггеры используют эту переменную сеанса для создания записей журнала и историй версий (при обновлении / удалении) критических таблиц. Это дает им возможности как для аудита, так и для отката. Я думаю, что и то, и другое было бы полезно для приложения с медицинскими записями.
Они также используют log4j для ведения журнала на уровне приложений, но запись данных происходит в базе данных.
Я уже веду журналы медицинских данных с помощью универсального класса, который сохраняет «различия» между множеством разных записей; это делается с помощью специального разреженного кода. Тем не менее, наши клиенты хотели бы регистрировать другие данные (например, административные операции, такие как создание и обновление пользователей / групп).
Похоже, вашему клиенту нужен контрольный журнал действий пользователя в системе.
Учтите, что в каждой точке входа действия (из веб-запроса) необходимо запустить запись аудита с перечислением / константой действия. Если возможно, заполните его информацией, предоставленной пользователем.
При выходе / окончании укажите в аудите, успешный он или нет. Пример в псевдокоде:
enum Actions {
OPEN_MEDICAL_FILE
...
}
void handleRequest(...) {
String patient = ...;
Audit audit = new Audit(OPEN_MEDICAL_FILE);
audit.addParameter("patient", patient);
try {
... more things ..
audit.addParameter("file", "#001");
... more things ...
audit.setSuccess();
} finally {
audit.save();
}
}
Здесь важно то, что все действия пользователя сохраняются, независимо от успеха или неудачи. Кроме того, клиенту действительно нужно знать всю необходимую информацию вместе с действием.
Поскольку мы регистрируем константы действий и данные, представление аудита клиенту может быть закодировано отдельно. Вы также получаете гибкость, поскольку изменение строки представления (например, «открытая медицинская карта № 001 для нулевого пациента» на «открытая медицинская карта пациента № 001) определяется не во время действия, а позже. нет необходимости повторно передавать данные аудита.
Я делал то же самое в действиях Struts2, я использовал "log4j". В зависимости от вашего сервера приложений он может иметь интегрированную систему ведения журнала, позволяющую использовать каталоги сообщений (например, Weblogic).
Фактически, одна из моих основных проблем заключается в том, что для сохранения логики ведения журнала в одном месте потребуется передать сеанс и любой заданный набор параметров ... постобработка - действительно интересный вариант!