Как регистрировать пользовательские операции в веб-приложении? - PullRequest
1 голос
/ 30 апреля 2009

Среда моего приложения: веб-интерфейс, Spring MVC + Security, Hibernate, MySQL (InnoDB)

Я работаю над небольшим приложением базы данных, управляемым из веб-интерфейса. Есть определенные и известные пользователи, которые обрабатывают хранимые данные. Теперь мне нужно отслеживать каждое действие создания / обновления / удаления, которое пользователь выполняет над базой данных, и создавать из этого простые, «похожие на список» отчеты. На данный момент я имею в виду таблицу «log» (столбцы: userId + timestamp + description и т. Д.). Я предполагаю, что аспект может быть запущен при любой операции C (R) UD, вставляющей строку журнала в эту таблицу. Но я не уверен, что именно так и нужно.

Мне также известны обычные журналы MySQL и log4j. Что касается файлов журналов, мне может понадобиться больше информации, чем доступно для MySQL. Log4j может быть решением, но я не вижу, как он может записывать в таблицы MySQL. Кроме того, я хотел бы сохранить некоторые ассоциации в моей журнальной таблице (например, идентификатор пользователя), чтобы позволить БД выполнять базовую фильтрацию и т.д.

Что бы вы порекомендовали? Есть ли какая-либо встроенная поддержка в Hibernate / Spring или log4j - верный путь?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 30 апреля 2009
  1. Log4j является модульным, вы можете написать свой собственный бэкэнд, который записывает журнал в базу данных, если вы хотите это сделать; на самом деле, он даже поставляется с приложением JDBC прямо из коробки, хотя обратите внимание на большое красное предупреждение там.
  2. Для Hibernate вы, вероятно, можете построить что-то на перехватчиках и событиях , которые отслеживают все модификации и регистрируют их в специальной таблице аудита.
1 голос
/ 30 апреля 2009

Рассматривали ли вы использование журнала операций MappedSuperclass для C (R) UD?

@MappedSuperclass
public class BaseEntity {
@Basic
@Temporal(TemporalType.TIMESTAMP)
public Date getLastUpdate() { ... }
public String getLastUpdater() { ... }
...
}

@Entity class Order extends BaseEntity {
@Id public Integer getId() { ... }
...
}
0 голосов
/ 30 апреля 2009

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

Если вам нужен готовый продукт для централизованного ведения журнала - попробуйте logFaces - он может записываться непосредственно в вашу собственную базу данных ( Раскрытие информации : я являюсь автором этого продукта. )

...