Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails审计日志插件_Grails_Logging_Audit - Fatal编程技术网

Grails审计日志插件

Grails审计日志插件,grails,logging,audit,Grails,Logging,Audit,我试图存储一个实例或至少每个可审核域的id。例如,有一个域“Student”,可审核。因此,无论何时创建或编辑域的实例,都会在审核日志中存储一条新记录。我想要的是存储保存或更新的每个域的id。怎样才能做到呢? 提前感谢您可以使用Grails Envers插件,该插件在底层使用Hibernate Envers。插件信息可以在插件网站上找到。我不会使用审计插件,它在运行测试时有一些问题。中的这个插件是在GORM不支持事件时创建的。您可以拦截以下事件 beforeInsert - Executed b

我试图存储一个实例或至少每个可审核域的id。例如,有一个域“Student”,可审核。因此,无论何时创建或编辑域的实例,都会在审核日志中存储一条新记录。我想要的是存储保存或更新的每个域的id。怎样才能做到呢?
提前感谢

您可以使用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?