Плагин ведения журнала аудита Grails

Я пытаюсь сохранить экземпляр или, по крайней мере, идентификатор каждого домена, который подлежит аудиту. Например, есть домен «Студент», и он доступен для аудита. Таким образом, всякий раз, когда создается или редактируется экземпляр домена, в журнале аудита сохраняется новая запись. Я хочу сохранить идентификатор каждого сохраненного или обновленного домена. Как это сделать? заранее спасибо


person Eddard Stark    schedule 11.10.2012    source источник


Ответы (4)


Вы можете использовать подключаемый модуль Grails Envers, который использует Hibernate Envers. Информацию о плагинах можно найти на сайте плагинов здесь.

person Tomasz Kalkosiński    schedule 11.10.2012

Вам лучше обратиться к URL-адресу: http://grails.org/plugin/audit-logging

Вышеупомянутый плагин хорошо работает для класса домена без коллекции, если вы используете коллекции в классе домена, обратитесь к этой ссылке stackoverflow: Как определить изменения коллекции в Hibernate PostUpdateEventListener?

Надеюсь, это поможет много

person Suganthan Madhavan Pillai    schedule 28.10.2013

Я бы не стал использовать плагин аудита, у него есть некоторые проблемы при запуске ваших тестов. Этот плагин был создан, когда 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

Надеюсь это поможет

person allthenutsandbolts    schedule 11.10.2012
comment
Это старый проект, и журнал аудита уже используется, я не могу это изменить. Есть ли способ использовать beforeInsert в домене плагина для ведения журнала аудита? - person Eddard Stark; 12.10.2012

Вы можете использовать события с плагином 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]"
            }
person allthenutsandbolts    schedule 12.10.2012