【问题标题】:Grails audit logging pluginGrails 审计日志插件
【发布时间】:2012-10-01 23:40:27
【问题描述】:

我正在尝试存储每个可审计域的实例或至少 id。例如,有一个域“学生”并且是可审计的。因此,每当创建或编辑域实例时,审计日志中都会存储一条新记录。我想要的是存储保存或更新的每个域的 id。如何做呢 ? 提前致谢

【问题讨论】:

    标签: grails logging audit


    【解决方案1】:

    您可以使用 Grails Envers 插件,该插件在下面使用 Hibernate Envers。插件信息可以在插件网站here找到。

    【讨论】:

      【解决方案2】:

      你可以参考网址:http://grails.org/plugin/audit-logging

      上面的插件适用于没有集合的领域类,如果你在领域类中使用集合,参考这个stackoverflow链接:How to determine Collection changes in a Hibernate PostUpdateEventListener?

      希望对你有很大帮助

      【讨论】:

        【解决方案3】:

        我不会使用审计插件,它在运行测试时会出现一些问题。这个插件是在 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
        

        希望对你有帮助

        【讨论】:

        • 它是一个旧项目并且已经使用了审计日志,我无法更改它。有没有办法在审计日志插件域中使用 beforeInsert ?
        【解决方案4】:

        您可以使用如下所示的带有 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]"
                    }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-27
          • 1970-01-01
          • 2013-07-09
          • 2011-02-21
          • 2014-06-21
          • 1970-01-01
          • 2023-02-08
          • 2015-11-26
          相关资源
          最近更新 更多