2011-10-31 118 views
1

我正在嘗試編寫一個可以追蹤所有Ehcache GET請求的類。對於癡迷的性能 - 這隻會出於調試目的而打開。記錄Ehcache獲取請求

我可以看到以下三個選項可供選擇:

1)寫的net.sf.ehcache.event.CacheEventListener的實現。這將是我的首選方式,但它只有PUT/REMOVE /等。掛鉤。沒有GET。衛生署!

2)寫的net.sf.ehcache.statistics.CacheUsageListener的實現。這種方法的問題在於,這個接口更多的是爲統計而設計,甚至不提供對當前緩存鍵/元素等東西的訪問,所以我將不得不通過ThreadLocal做出糟糕的黑客行爲來實現我想要的。呸!

3)寫的Ehcache包裝,並通過它信道的所有請求。非常痛苦,因爲我們以不同的方式使用Ehcache(使用Hibernate和不使用Ehcache),這意味着我必須爲所有這些不同的情況編寫不同的包裝。增加維護的難度,並不是很精確,因爲不可能知道,例如,GET操作是否已經命中了一個陳舊的條目。

我錯過了其他選擇嗎?

回答

1

第四個選項是爲net.sf.ehcache.Cache 啓用調試級別日誌記錄爲要追蹤信息的緩存啓用緩存統計信息。 然後,你會得到「緩存:」+ getName()+「存儲命中」+鍵「或」configuration.getName()+「緩存命中,但元素過期」「日誌語句...所以對於未命中。

+0

有趣的建議,但不幸的是還不夠好。這種方法的問題是,它有時會很難(如果不是不可能的)兩個日誌線相互連接,尤其是如果有很多其他的高速緩存活動正在進行 – mindas

+0

不知道你的意思是把兩條線連在一起,什麼樣的日誌線?有線程ID在那裏?還是其他的東西? –

+0

如果我按照你的意見,我會得到兩個日誌行 - 一個來自網絡。 sf.ehcache.Cache,另一個來自緩存統計類,如果有很多其他的緩存活動,匹配這兩個日誌行可能會很困難,如果我得到了你的建議,請糾正我錯了。 – mindas