Spring Aop 实现Log日志系统——基本实现

https://blog.csdn.net/cun_chen/article/details/52464443

https://blog.csdn.net/rainbow702/article/details/52053958

goooooooooooooood!!

https://blog.csdn.net/czmchen/article/details/42392985

Log日志系统可以说是项目开发中最基本的模块之一,在未使用Spring Aop之前,日志记录都是采用手工配置。由于开发人员的代码风格不统一,经常会导致日志风格混乱,难以阅读,甚至日志遗漏情况。
通过Aop可以实现日志系统的自动配置,减少人工配置的错误风险,同时提高日志系统的健壮性。

利用spring aop统一处理异常和打日志

https://blog.csdn.net/u012814506/article/details/48638017

例:

package jp.co.niuma.security.aop.log;

import java.util.Arrays;
import java.util.Enumeration;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

@Aspect
public class Log4Controller {

protected Logger logger = Logger.getLogger(this.getClass());

@Pointcut(“execution( * jp.co.niuma.security.web.spring.controller..*.*(..))”)
public void allControllerMethodsPointcut() {
}

@Around(“allControllerMethodsPointcut()”)
public Object aroundMethod(ProceedingJoinPoint pjd) {

Object result = null;
String methodName = pjd.getSignature().getName();
String methodFullName = pjd.getSignature().getDeclaringTypeName();

try {
logger.info(
“The CONTROLLER method ” + methodFullName + “.” + methodName + ” BEGINS with args : ” + Arrays.asList(pjd.getArgs()));
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if(attributes != null){
HttpServletRequest request = attributes.getRequest();
logger.debug(“URL : ” + request.getRequestURL().toString());
logger.debug(“HTTP_METHOD : ” + request.getMethod());
logger.debug(“IP : ” + request.getRemoteAddr());
Enumeration<String> enu = request.getParameterNames();
while (enu.hasMoreElements()) {
String paraName = (String) enu.nextElement();
logger.info(paraName + “: ” + request.getParameter(paraName));
}
}

// 目標Methodの実行
result = pjd.proceed();
logger.info(“The CONTROLLER method ” + methodFullName + “.” + methodName + ” ends with return value : ” + result);

} catch (Throwable e) {
logger.error(“The CONTROLLER method ” + methodFullName + “.” + methodName + ” occurs exception:” + e);
e.printStackTrace();
logger.info(“The CONTROLLER method ” + methodFullName + “.” + methodName + ” ENDS”);
//ログイン機能、ログアウト機能、パスワード変更機能などの場合、header,menu,footerなどのないerrorPage画面を表示する。
if(Pattern.matches(“^jp\\.co\\.niuma\\.security\\.web\\.spring\\.controller\\.[a-zA-Z]+$”, methodFullName)){
return “../../errorPage”;
}else{//ログイン機能、ログアウト機能、パスワード変更機能以外の場合、header,menu,footerなどのあるerror画面を表示する。
return “error”;
}
}
logger.info(“The CONTROLLER method ” + methodFullName + “.” + methodName + ” ENDS”);
return result;
}
}

Tags:,

Add a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注