【问题标题】:Ambient filter / interceptors for domain classes in Gorm / Grails?Gorm / Grails中域类的环境过滤器/拦截器?
【发布时间】:2010-12-10 14:13:17
【问题描述】:

我刚刚为我的 Grails 系统集成了一个日志记录概念,并使用过滤器机制来记录对我的控制器和操作的访问。好消息是我可以为所有控制器和操作定义一个过滤器。

对于域类,我只知道拦截器的概念,我必须为每个单独的域类编写一个拦截器。是否有类似于域类过滤器的概念,我可以在其中为所有域类定义拦截器?

提前非常感谢, 约尔格。

更新 1: 感谢 Stefan 提供的关于审计日志插件的提示。 Audit Logging Plugin 看起来是最简单的替代方案,但根据我的喜好生成了太多的行/日志,并且不使用 grails/log4j 日志系统。

目前,我的要求是:

  1. 记录所有域类的插入/更新/删除(以便仅记录事件,而不是每个字段/列的每次更改)

  2. 登录到 Grails 日志系统 (log4j),以便记录到标准输出、单个数据库表或电子邮件(级别可能是,例如,INFO 或 TRACE)

  3. 记录到一个特殊的域类(db 表),以便在其之上构建一个日志可视化/管理系统(通过 Grails 控制器和操作)。这里最好配置日志是在同一个数据库/grails-app中还是在另一个数据库/grails-app中(以便以后拆分日志管理系统)。

据我所知,可以通过以下方式完成简单的“更改”日志记录:

  1. 域类中的单独日志语句(需要在每个域类中插入/更新/删除事件)

  2. 定义一个“日志”超类,它继承插入/更新/删除事件(使得在特殊域类中生成单独的插入/更新/删除事件变得困难)

  3. 为所有控制器定义一个过滤器,但只保存/更新/删除操作(问题:不记录对没有控制器的域类的更改,或者在一个操作中触及多个域类)

    李>

希望这对其他人有所帮助。然而,我错过了什么吗?

【问题讨论】:

    标签: logging grails dns grails-orm interceptor


    【解决方案1】:

    也许http://www.grails.org/plugin/audit-logging 就是您要找的。​​p>

    【讨论】:

    • 感谢您的提示。审计日志插件能够将域类记录到数据库表中。但是,似乎配置起来并不容易。我还没有找到配置数据库、表列或日志级别的方法。例如,该插件会记录对域类的每个字段的每次更改,从而可以将其用作版本控制系统(您可以回滚每个更改)。但是,我只需要记录更改本身(插入、更新、删除)并且想使用配置的 log4j 日志记录(即我自己的数据库、文件或电子邮件的附加程序)。
    • 另一个选项是覆盖 resources.groovy 中的“eventTriggeringInterceptor”。默认情况下,此 bean 使用 ClosureEventTriggeringInterceptor 委托给每个域类中的 onXXX 方法。通过为 eventTriggeringInterceptor 使用一些自定义类,您可以在全局级别上处理事件,而不是特定于域类。
    • 修正昨天的评论:看看grails.org/plugin/falcone-util。它还为休眠事件提供了一种事件机制。
    猜你喜欢
    • 1970-01-01
    • 2016-08-05
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 2014-04-07
    • 2011-03-16
    • 2012-02-15
    相关资源
    最近更新 更多