我正在使用Spring AOP來減少我現有應用程序的調試日誌。基於運行時條件啓用Aspect代理,Spring AOP?
我試圖做的是記錄基於日誌級別的每個方法調用。
我知道春天會,如果我用下面的方面,將會引入一些開銷,如果它不是在調試級別構建一個代理,每類礦井:
package com.basepackage.aop;
import....
@Aspect
@Component
public class LogAspect {
private Logger logger=Logger.getLogger(LogAspect.class.getName());
@Pointcut("execution(* com.basepackage..*.*(..))")//all the method in my app
private void debug_log(){};
@Around("debug_log()")//here, I hope I can introduce something like && logger.isDebugeEnable()
public Object aroundLog(ProceedingJoinPoint joinPoint) throws Throwable{
String signature=joinPoint.getSignature().toString();
String paramList = null;
Object[] args=joinPoint.getArgs();
for (int i = 0; i < args.length; i++) {
paramList+=args[i]+" ";
}
String debugMsg="----------enter "+signature;
if(paramList!=null){
debugMsg+="\nparam: "+paramList;
}
LogUtil.debug(debugMsg);//will delegate to log4j
try{
Object returnObject= joinPoint.proceed();
LogUtil.debug("--------return form"+signature);//will delegate to log4j
return returnObject;
}
catch(Throwable t){
LogUtil.error("--------error from "+signature, t);//will delegate to log4j
throw t;
}
}
}
我希望的是,只有當log4j的級別< =調試級別將Spring AOP構造每個類的代理。
或者有關如何使日誌清潔的任何更多的建議將不勝感激。
謝謝!
謝謝!我會嘗試 !但我還有一件事要問,「記錄器」有什麼需要注意的?例如:是否必須是非靜態的,或者必須從哪裏創建(注入,構造函數或其他)? – Jaskey 2014-11-04 04:59:33
我在tomcat中運行應用程序時遇到了一些錯誤,嵌套異常是org.aspectj.weaver.tools.UnsupportedPointcutPrimitiveException:切入點表達式的執行(* wodinow.weixin.jaskey .. *。*(..))&& if ()'包含不受支持的切入點基元'if' – Jaskey 2014-11-04 05:58:58
如果您願意,記錄器可以是靜態的。這個問題與AOP問題無關。 – kriegaex 2014-11-04 12:00:25