Java 记录Ehcache get请求

Java 记录Ehcache get请求,java,caching,ehcache,terracotta,Java,Caching,Ehcache,Terracotta,我正在尝试编写一个类来跟踪所有Ehcache GET请求。对于性能痴迷者-这只会在调试时打开 我可以看到以下三个选项: 1) 编写net.sf.ehcache.event.CacheEventListener的实现。这将是我的首选方式,但它只有放置/移除/等挂钩。不行。啊 2) 编写net.sf.ehcache.statistics.CacheUsageListener的实现。这种方法的问题在于,该接口更多地是为统计而设计的,甚至不提供对当前缓存键/元素等内容的访问,因此我必须进行可怕的黑客攻击

我正在尝试编写一个类来跟踪所有Ehcache GET请求。对于性能痴迷者-这只会在调试时打开

我可以看到以下三个选项:

1) 编写
net.sf.ehcache.event.CacheEventListener的实现
。这将是我的首选方式,但它只有放置/移除/等挂钩。不行。啊

2) 编写
net.sf.ehcache.statistics.CacheUsageListener
的实现。这种方法的问题在于,该接口更多地是为统计而设计的,甚至不提供对当前缓存键/元素等内容的访问,因此我必须进行可怕的黑客攻击(想想:通过
ThreadLocal
共享状态)来实现我想要的。恶心

3) 编写一个Ehcache包装器,并通过它传递所有请求。由于我们以不同的方式使用Ehcache(有Hibernate和没有Hibernate),这相当痛苦,这意味着我必须为所有这些不同的情况编写不同的包装器。增加了维护的难度,而且并不精确,因为不可能知道GET操作是否遇到了过时的条目


还有其他选项我遗漏了吗?

第四个选项是为net.sf.ehcache.Cache启用调试级别日志记录,并为要跟踪信息的缓存启用缓存统计信息。
然后,对于“+key”或“configuration.getName()+”缓存命中,但元素已过期”日志语句,您会得到“Cache:+getName()+”存储命中……对于未命中,也是如此。

第四个选项是为net.sf.ehcache.Cache启用调试级别日志记录,并为要跟踪信息的缓存启用缓存统计信息。
然后,您将获得“+key”或“configuration.getName()+”缓存命中,但元素已过期”日志语句的“Cache:+getName()+”存储命中。。。错过的也一样。

这是一个有趣的建议,但不幸的是还不够好。这种方法的问题是,有时很难(如果不是不可能的话)将两条日志线彼此连接起来,特别是在有大量其他缓存活动正在进行的情况下。不确定将两条日志线连接在一起是什么意思,是什么类型的日志线?里面有线程id吗?或者别的什么?如果我听从你的建议,我会得到两行日志——一行来自net.sf.ehcache.Cache,另一行来自Cache statistics类。如果存在大量其他缓存活动,那么匹配两个日志行可能会很困难。如果我听错了你的建议,请纠正我。我想如果你看一下,你会发现searchInStoreWithStats有你想要的日志记录(我认为)。这是一个有趣的建议,但不幸的是还不够好。这种方法的问题是,有时很难(如果不是不可能的话)将两条日志线彼此连接起来,特别是在有大量其他缓存活动正在进行的情况下。不确定将两条日志线连接在一起是什么意思,是什么类型的日志线?里面有线程id吗?或者别的什么?如果我听从你的建议,我会得到两行日志——一行来自net.sf.ehcache.Cache,另一行来自Cache statistics类。如果存在大量其他缓存活动,那么匹配两个日志行可能会很困难。如果我听错了你的建议,请纠正我。我想如果你看一下,你会发现searchInStoreWithStats有你想要的日志记录(我想)。