Ответ 1
как насчет https://github.com/dima767/inspektr У меня почти такие же требования, как вы описали выше, и я копаю в inspektr.
Знаете ли вы какую-либо хорошую библиотеку Java для ведения журнала аудита? Или, по крайней мере, хорошая книга/статья, чтобы помочь выбрать хороший подход для создания журнала аудита для приложения?
Требования к библиотеке:
- определить общие метаданные аудита (userId, время, IP,...)
- определять типы сообщений аудита (транзакция отправлена, полученное сообщение,...)
- заблокировать/подписать индивидуальные аудиторские сообщения (для отказа от отказа)
- поиск журнала аудита на основе метаданных
- и т.д.
Edit:
Я не ищу автоматическое решение, я совершенно счастлив назвать что-то вроде:
AuditEvent event = new TransactionSentEvent(userId, account, amount, ...)
AuditLog.audit(auditEvent);
Дело в том, что инфраструктура позади - безопасное хранение в базе данных, неподтверждение и т.д.
как насчет https://github.com/dima767/inspektr У меня почти такие же требования, как вы описали выше, и я копаю в inspektr.
Итак, если вы ищете фреймворк, вы можете попробовать logback-audit. Это люди, которые находятся за библиотекой протоколов Java, logback.
Если вы используете Java, один из способов - использовать springframework и aop. Это самый гибкий вариант. Вот пример
Вы также можете сделать это на уровне базы данных, используя hibernate (подробнее)
Вы можете использовать библиотеку AscpectJ без Spring, через аннотации
Хороший подход к регистрации на уровне бизнеса/операций - это определение того, что именно нужно для регистрации. Вы уже это сделали.
Вам не нужно добавлять новые рамки или AOP. Однако у вас есть некоторые дополнительные требования, которые мешают вам использовать общие фреймворки ведения журнала, такие как Log4J или java.util.logging, не создавая больше работы.
Самый простой подход, который я могу думать о том, что вы можете сделать, - это иметь класс аудита с подключением или настройкой JDBC-соединения. Это можно сделать с помощью Spring, если вы уже используете эту инфраструктуру. Если у вас нет контейнера DI, вам нужно определить это как одиночный.
Еще одна вещь, в которой вы нуждаетесь, - это возможность подписания. Java имеет java.security.Signature для подписи и проверки данных.
Как я уже говорил, у вас есть требования, которые препятствуют использованию доступных фреймворков регистрации. То есть:
Для облегчения поиска вам необходимо хранить данные в базе данных, так как запись в текстовый файл будет затруднена. Используя фреймворки регистрации, вы должны изучить API и быть привязанным к фреймворку, который не является частью стандарта.