LoggingInterceptor 或 AOP 日志记录
LoggingInterceptor or AOP logging
我打算处理登录 spring。
很少有人建议通过 LoggingInterceptor 来处理,有人建议使用 AOP 横切关注点
企业应用程序推荐或遵循哪一个最佳实践?
谢谢。
这两种方法各有优缺点。通过 LoggingInterceptor 进行日志记录是更好的方法,因为它是 Java 提供的用于处理日志记录的标准库,您也可以进行自定义日志记录。
AOP 是更好的方法,当你想在更细粒度的级别上实现日志记录时,如在函数的某些 return 值或 classes 上。例如,如果您只想在 returning 值为 null 时记录请求。你可以使用 AOP 作为 :
@AfterReturning(pointcut = "execution(* com.foo.bar..*.*(..))", returning =
"retVal")
public void logAfterMethod(JoinPoint joinPoint, Object retVal) {
...
}
您也可以使用日志记录拦截器记录 returning 值,但您需要为此编写另一个函数。 i-e
public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object
arg3) throws Throwable {
log = LogFactory.getLog(arg3.getClass());
log.info("LOGGING IS: "+arg1.getName());
}
从生产的角度来看,AOP 具有性能开销,因为您正在为所有服务调用的执行增加开销。而 Logging Intercept 只是一个具有正常执行周期的 class。
我打算处理登录 spring。
很少有人建议通过 LoggingInterceptor 来处理,有人建议使用 AOP 横切关注点
企业应用程序推荐或遵循哪一个最佳实践?
谢谢。
这两种方法各有优缺点。通过 LoggingInterceptor 进行日志记录是更好的方法,因为它是 Java 提供的用于处理日志记录的标准库,您也可以进行自定义日志记录。
AOP 是更好的方法,当你想在更细粒度的级别上实现日志记录时,如在函数的某些 return 值或 classes 上。例如,如果您只想在 returning 值为 null 时记录请求。你可以使用 AOP 作为 :
@AfterReturning(pointcut = "execution(* com.foo.bar..*.*(..))", returning =
"retVal")
public void logAfterMethod(JoinPoint joinPoint, Object retVal) {
...
}
您也可以使用日志记录拦截器记录 returning 值,但您需要为此编写另一个函数。 i-e
public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object
arg3) throws Throwable {
log = LogFactory.getLog(arg3.getClass());
log.info("LOGGING IS: "+arg1.getName());
}
从生产的角度来看,AOP 具有性能开销,因为您正在为所有服务调用的执行增加开销。而 Logging Intercept 只是一个具有正常执行周期的 class。