Grails审计日志插件
我试图存储一个实例或至少每个可审核域的id。例如,有一个域“Student”,可审核。因此,无论何时创建或编辑域的实例,都会在审核日志中存储一条新记录。我想要的是存储保存或更新的每个域的id。怎样才能做到呢?Grails审计日志插件,grails,logging,audit,Grails,Logging,Audit,我试图存储一个实例或至少每个可审核域的id。例如,有一个域“Student”,可审核。因此,无论何时创建或编辑域的实例,都会在审核日志中存储一条新记录。我想要的是存储保存或更新的每个域的id。怎样才能做到呢? 提前感谢您可以使用Grails Envers插件,该插件在底层使用Hibernate Envers。插件信息可以在插件网站上找到。我不会使用审计插件,它在运行测试时有一些问题。中的这个插件是在GORM不支持事件时创建的。您可以拦截以下事件 beforeInsert - Executed b
提前感谢您可以使用Grails Envers插件,该插件在底层使用Hibernate Envers。插件信息可以在插件网站上找到。我不会使用审计插件,它在运行测试时有一些问题。中的这个插件是在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]"
}
您可以更好地参考url: 上述插件适用于没有集合的域类,如果您在域类中使用集合,请参阅以下stackoverflow链接:
希望它能帮上大忙这是一个老项目,审计日志已经被使用了,我无法改变这一点。在审计登录插件域中是否有任何方法可以使用beforeInsert?