java - Spring -slf4J : how to automatically log errors and exceptions?

标签 java hibernate spring aspectj slf4j

我们将 Spring 与 slf4j 和 hibernate 一起使用,我正在尝试找出一种自动记录异常和错误的方法(即无需在每个类中启动调试器的实例),以便它可以捕获任何错误或异常抛出并在日志中获取类和方法名称,

我读了一篇关于为此使用方面和拦截器的非常简短的说明,所以你能为我提供一些详细的实现方法吗,

问候,

最佳答案

异常方面可能如下所示:

@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;
     }
  }
}

Spring session :

<!-- 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>

编辑:

如果您希望记录器代表包装的 bean 进行记录,您当然可以这样做:

LoggerFactory.getLogger(pjp.getTarget().getClass()).warn("damn!");

或者如果您更喜欢此方法的声明类而不是实际的(可能代理/自动生成的类型):

LoggerFactory.getLogger(pjp.getSignature().getDeclaringType()).warn("damn!");

老实说,我无法估计每次调用 LoggerFactory.getLogger(..) 对性能的影响。我认为它应该不会太糟糕,因为无论如何异常都是异常(exception)(即罕见)。

关于java - Spring -slf4J : how to automatically log errors and exceptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5309717/

相关文章:

java - android中如何检查TextView是否有图像

java - 除非另有明确说明,有什么方法可以使其假定为 transient 吗?

spring - 如何在Grails resources.groovy中编写等效于Spring的jee:jndi-lookup?

java - Netflix 假装异常

java - 使用 Hibernate 多对多连接表中再添加一列

java - 如何在关机时等待 RestTemplate 响应?

java - 在 JavaFX 中操作 SVGPath

java - 音频文件下采样

Java 内容 MD5 header 不匹配

java - 如何在页面上显示实体?改为 [Entity of type ... with id : 1]