bir istisna durumu şöyle olabilir:
@Aspect
public class ExceptionAspect {
private static final Logger log = LoggerFactory.getLogger(ExceptionAspect.class);
public Object handle(ProceedingJoinPoint pjp) throws Throwable {
try {
return pjp.proceed();
} catch (Throwable t) {
// so something with t: log, wrap, return default, ...
log.warn("invocation of " + pjp.getSignature().toLongString() + " failed", t);
// I hate logging and re-raising, but let's do it for the sake of this example
throw t;
}
}
}
bahar conf:
<!-- log exceptions for any method call to any object in a package called 'svc' -->
<bean class="org.example.aspects.ExceptionAspect" name="exceptionAspect" />
<aop:config>
<aop:aspect ref="exceptionAspect">
<aop:around method="handle" pointcut="execution(* org.example..svc..*.*(..))" />
</aop:aspect>
</aop:config>
DÜZENLEME:
sen logger sarılmış fasulye adına oturum istiyorsanız, tabii ki yapabilirdi:
LoggerFactory.getLogger(pjp.getTarget().getClass()).warn("damn!");
veya eğer
gerçek (potansiyel olarak proksiye/otomatik olarak oluşturulan tip) yerine bu yöntemin beyan sınıfını tercih edersiniz:
LoggerFactory.getLogger(pjp.getSignature().getDeclaringType()).warn("damn!");
Dürüst olmak gerekirse, LoggerFactory.getLogger (..) öğesini her seferinde çağırmanın performans sonuçlarını tahmin edemiyorum. İstisnalar istisna (yani nadir) olduğu için çok kötü olmamalı.
Bu, bir yığın izinden zaten sahip olmadığınız şey ne başarır? İstisnai bir şekilde günlüğe kaydetmeyi ve yutmayı planlıyorsanız, bu bana oldukça kötü bir fikir gibi geliyor. –