Я пытаюсь сохранить экземпляр или, по крайней мере, идентификатор каждого домена, который подлежит аудиту. Например, есть домен «Студент», и он доступен для аудита. Таким образом, всякий раз, когда создается или редактируется экземпляр домена, в журнале аудита сохраняется новая запись. Я хочу сохранить идентификатор каждого сохраненного или обновленного домена. Как это сделать? заранее спасибо
Плагин ведения журнала аудита Grails
Ответы (4)
Вы можете использовать подключаемый модуль Grails Envers, который использует Hibernate Envers. Информацию о плагинах можно найти на сайте плагинов здесь.
Вам лучше обратиться к URL-адресу: http://grails.org/plugin/audit-logging
Вышеупомянутый плагин хорошо работает для класса домена без коллекции, если вы используете коллекции в классе домена, обратитесь к этой ссылке stackoverflow: Как определить изменения коллекции в Hibernate PostUpdateEventListener?
Надеюсь, это поможет много
Я бы не стал использовать плагин аудита, у него есть некоторые проблемы при запуске ваших тестов. Этот плагин был создан, когда GORM не поддерживал события. Вы можете перехватить следующие события
beforeInsert - Executed before an object is initially persisted to the database
beforeUpdate - Executed before an object is updated
beforeDelete - Executed before an object is deleted
beforeValidate - Executed before an object is validated
afterInsert - Executed after an object is persisted to the database
afterUpdate - Executed after an object has been updated
afterDelete - Executed after an object has been deleted
onLoad - Executed when an object is loaded from the database
Надеюсь это поможет
Вы можете использовать события с плагином AuditLog, как показано ниже, а затем добавить все, что захотите. Надеюсь, это имеет смысл
def onChange = { oldMap,newMap ->
println "Person was changed ..."
oldMap.each({ key, oldVal ->
if(oldVal != newMap[key]) {
println " * $key changed from $oldVal to " + newMap[key]
}
})
}
def onSave = {
println "new datainserted"
// may optionally refer to newState map
}
В любом из этих методов мы можем использовать
def event = new AuditLogEvent(
actor: actor,
className: className,
eventName: eventName,
persistedObjectId: objectId,
propertyName: propertyName,
newValue: newValue
)
if (event.validate()) {
auditLogListener.saveAuditLog(event)
log.info "Logged audit event [$event]"
}