2013-02-21 49 views
1

我正在使用Grails Audit Logging Plugin在我的grails應用程序上記錄創建/編輯/刪除操作。Grails審計日誌記錄插件 - 性能

有沒有人知道實際的日誌記錄(保存日誌到數據庫)是在一個單獨的線程中執行,還是隻會在日誌記錄完成後返回請求的響應(偶然修改一些記錄)。無法在文檔或外部的任何位置找到任何內容。

回答

2

該插件使用Hibernate Event Systeminternally。消息以阻塞的方式處理,因此在日誌記錄完成後,將收到響應

這是很容易複製 - 只需創建一個自定義休眠聽衆:

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] 
    } 
} 
+0

非常感謝您的分析和實例。現在這意味着,我可能需要推出自己的。由於我不需要記錄確切的變化,我應該能夠推出一些不會阻止的事情。 – techfoobar 2013-02-26 15:40:01

+0

不客氣。如果我是你,我會考慮使用log4j來達到這個目的(AsynchAppender應該這樣做)。這可能會爲你節省一些時間。 – 2013-02-26 16:01:06