1

我正在使用Grails 审计日志插件来记录我的 grails 应用程序上的创建/编辑/删除操作。

有谁知道实际的日志记录(将日志保存到数据库)是在单独的线程中执行,还是仅在日志记录完成后才会返回对请求的响应(例如,顺便修改了一些记录)。在他们的文档或外部的任何地方都找不到任何关于此的内容。

4

1 回答 1

2

这个插件内部使用了休眠事件系统。消息以阻塞方式处理,因此将在日志记录完成收到响应。

它很容易重现 - 只需创建一个自定义 Hibernate 侦听器:

import org.hibernate.event.PostInsertEvent;
import org.hibernate.event.PostInsertEventListener;
import org.hibernate.event.PostUpdateEvent;
import org.hibernate.event.PostUpdateEventListener;

class HibernateDummyListener implements PostInsertEventListener, PostUpdateEventListener {

    public void onPostInsert(final PostInsertEvent event) {
        println "Hibernate: ON POST INSERT"

        //No delay
    }

    public void onPostUpdate(final PostUpdateEvent event) {
        println "Hibernate: ON POST UPDATE"

        Thread.sleep(10000)
    }
}

...和resources.groovy:

beans = {
   hibernateDummyListener(HibernateDummyListener)

   hibernateEventListeners(HibernateEventListeners) {
      listenerMap = ['post-insert':hibernateDummyListener,
                     'post-update':hibernateDummyListener]
   }
}
于 2013-02-26T14:28:22.400 回答