package jp.aegif.nemaki.util.spring.aspect.log; import javax.annotation.PostConstruct; import org.apache.chemistry.opencmis.commons.server.CallContext; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.aspectj.lang.ProceedingJoinPoint; import jp.aegif.nemaki.util.spring.aspect.log.impl.CustomToStringImpl; public class DefaultLogger { private static Logger log = Logger.getLogger(DefaultLogger.class); private String logLevel; private boolean returnValue; private boolean fullQualifiedName; private boolean arguments; private boolean beforeEnabled; private boolean afterEnabled; private boolean callContextEnabled; private CustomToStringImpl customToString; @PostConstruct public void init() { if (log != null){ log.setLevel(Level.toLevel(logLevel)); } } public Object aroundMethod(ProceedingJoinPoint jp) throws Throwable{ StringBuilder sb = new StringBuilder(); Object[] args = jp.getArgs(); //Parse callContext if(callContextEnabled){ CallContext callContext = getCallContext(args); if(callContext == null){ sb.append("N/A; "); }else{ String userId = callContext.getUsername(); sb.append("UserId=" + userId + " executes; "); } } //Method name if(fullQualifiedName){ sb.append(jp.getTarget().getClass().getName()); }else{ sb.append(jp.getTarget().getClass().getSimpleName()); } sb.append("#").append(jp.getSignature().getName()); if(arguments){ sb.append(customToString.parseArguments(args)); } //Before advice if(beforeEnabled){ log.info("nemaki_log[BEFORE]; " + sb.append("; ").toString()); } //Execute method try{ Object result = jp.proceed(); //After advice if(afterEnabled){ sb.append("returned "); if (returnValue && result != null){ String resultString = customToString.parse(result); sb.append(resultString); } log.info("nemaki_log[AFTER]; " + sb.append("; ").toString()); } return result; }catch(Exception e){ log.error("nemaki_log[ERROR];" + e.toString(), e); throw e; } } private CallContext getCallContext(Object[] args){ if(args != null && args.length > 0){ for(int i=0; i < args.length; i++){ Object arg = args[i]; if(arg != null && arg instanceof CallContext){ CallContext callContext = (CallContext)arg; return callContext; } } } return null; } public void setLogLevel(String logLevel) { this.logLevel = logLevel; } public void setReturnValue(boolean returnValue) { this.returnValue = returnValue; } public void setFullQualifiedName(boolean fullQualifiedName) { this.fullQualifiedName = fullQualifiedName; } public void setArguments(boolean arguments) { this.arguments = arguments; } public void setBeforeEnabled(boolean beforeEnabled) { this.beforeEnabled = beforeEnabled; } public void setAfterEnabled(boolean afterEnabled) { this.afterEnabled = afterEnabled; } public void setCallContextEnabled(boolean callContextEnabled) { this.callContextEnabled = callContextEnabled; } public void setCustomToString(CustomToStringImpl customToString) { this.customToString = customToString; } }