AOP实现业务日志及异常日志记录
Posted 一味苦茶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AOP实现业务日志及异常日志记录相关的知识,希望对你有一定的参考价值。
服务对外提供接口,若没有日志记录,出问题时,无法确认调用方还是系统内部造成的异常。那么日志记录便排上了用场,但是每个方法都记录调用参数,记录返回结果,若多人开发,日志记录不规范等等问题便闹人心。于是,结合AOP,完美解决该问题
@Component
@Aspect
public class ControllerAOP extends ServiceResource {
@Pointcut("execution(* com.ywkc.gcs.resource..*.*(..))")
public void pointcutResult() {
}
@Around("pointcutResult()")
public Object handlerControllerMethod(ProceedingJoinPoint joinPoint) {
Object result = null;
String className =joinPoint.getTarget().getClass().getSimpleName();
String methodName = className + "_" +getMethodName(joinPoint);
try {
LoggerUtil.error("method:"+ methodName + " params:" + Arrays.asList(joinPoint.getArgs()));
result = joinPoint.proceed();
LoggerUtil.error("method:"+ methodName + " result:" + result);
} catch (Throwable e) {
LoggerUtil.error("method:"+ methodName + " error:" + e);
return packageResult(500, "系统异常,请联系管理员", "");
}
return result;
}
private String getMethodName(ProceedingJoinPoint joinPoint) {
Signature signature =joinPoint.getSignature();
MethodSignature methodSignature =(MethodSignature) signature;
Method method = methodSignature.getMethod();
return method.getName();
}
}
注:com.ywkc.gcs.resource包下皆为对外提供的resf接口类
在spring文件中注册
<context:component-scan base-package="com.ywkc.gcs" />
<aop:aspectj-autoproxy/>
<aop:aspectj-autoproxy proxy-target-class="true" />
LoggerUtil.error为简化日志记录,避免每个类都定义
privatefinalstatic Logger logger = LoggerFactory.getLogger(App.class);
logger.error("日志记录");
LoggerUtil工具类代码如下
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoggerUtil {
public static Logger getProvate() {
return LoggerFactory.getLogger(newException().getStackTrace()[1].getClassName());
}
public static void info(String msg) {
getProvate().info(msg);
}
public static void error(String msg) {
getProvate().error(msg);
}
}
以上是关于AOP实现业务日志及异常日志记录的主要内容,如果未能解决你的问题,请参考以下文章