2011-10-31 3 views
1

모든 Ehcache GET 요청을 추적 할 클래스를 작성하려고합니다. 사로 잡힌 성능을 위해서는 디버깅 목적으로 만 스위치가 켜져 있어야합니다.Ehcache get 요청을 로깅

1) net.sf.ehcache.event.CacheEventListener의 구현을 작성 :

나는 가능한 세 가지 옵션은 다음을 참조 할 수 있습니다. 이것은 내가 선호하는 방법이지만 PUT/REMOVE/etc 만 있습니다. 후크. 아니 GET. 도!

2) 구현을 작성하십시오 net.sf.ehcache.statistics.CacheUsageListener. 이 접근 방식의 문제점은이 인터페이스가 통계를 위해 더 많이 설계되어 현재 캐시 키/요소와 같은 항목에 대한 액세스를 제공하지 않기 때문에 내가 원하는 것을 달성하기 위해 끔찍한 해킹 (생각 : 공유 상태 : ThreadLocal)을 수행해야한다는 것입니다. . 왝!

3) Ehcache 랩퍼를 작성하고이를 통해 모든 요청을 채널하십시오. 우리가 Ehcache를 다른 방식으로 (Hibernate와 Without를 사용하여) 사용함에 따라 상당히 고통 스러웠습니다.이 모든 다른 경우에 대해 다른 래퍼를 작성해야한다는 것을 의미합니다. 예를 들어, GET 작업이 부실 항목에 부딪쳤을 지 여부를 알 수 없기 때문에 유지 관리 작업이 추가되고 실제로 정확하지는 않습니다.

내가 놓친 다른 옵션이 있습니까?

답변

1

네 번째 옵션은 net.sf.ehcache.Cache에 대한 디버그 수준 로깅을 활성화하는 것입니다. 정보를 추적하려는 캐시의 캐시 통계를 활성화합니다. 그러면 "Cache :"+ key "또는"configuration.getName() + "캐시 히트에 대해 hit hit를 저장하지만 요소 만료 된 로그 문 ..."+ getName() + " .

+0

흥미로운 제안이지만, 불행히도 충분하지 않습니다.이 접근법의 문제점은 두 개의 로그 라인을 서로 연결하는 것이 때때로 어렵다는 것입니다 (특히 불가능한 경우도 있음). – mindas

+0

두 줄을 연결하는 것이 무엇인지, 어떤 종류의 로그 줄이 있는지, 그 안에 스레드 ID가 있습니까? 아니면 다른 것이 있습니까? –

+0

조언을 따르는 경우 두 줄의 로그가 생깁니다. sf.ehcache.Cache와 cache statistics 클래스의 다른 캐시 활동이 많으면 두 로그 라인을 일치시키는 것이 어려울 수 있습니다. 잘못된. – mindas

관련 문제