zoukankan      html  css  js  c++  java
  • java aop 日志打印 正则设置

    package tz.lion.Utils.aop;

    import com.alibaba.fastjson.JSON;
    import org.springframework.web.multipart.MultipartFile;
    import tz.lion.config.shiro.SessionHolder;
    import tz.lion.domain.master.SysUser;
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.annotation.AfterReturning;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;

    import javax.servlet.http.HttpServletRequest;
    import java.util.Enumeration;

    /**
    * aop实现web层的日志切面
    * @author 104
    */
    @Aspect
    @Component
    public class WebLogAspect {

    private Logger logger = LoggerFactory.getLogger("webLogAspect");

    ThreadLocal<Long> startTime = new ThreadLocal<Long>();

    /**
    * 定义一个切入点
    */
    @Pointcut("execution(public * tz.lion.controller.*..*.*(..))")
    public void webLog(){}
    /**
    * 定义一个非切入点
    * controller 方法名称,以UnAop 开头 不打印日志;例如文件参数等长字符
    */
    @Pointcut("!execution(public * tz.lion.controller.*..*.UnAop*(..))")
    private void logSender(){}
    /**
    * 处理日志,打印请求相关数据
    * @param joinPoint
    */
    @Before("webLog()&&logSender()")
    public void doBefore(JoinPoint joinPoint){
    startTime.set(System.currentTimeMillis());

    SysUser user = SessionHolder.getHolder().getSessionAttribute(SessionHolder.CURRENT_USER);
    if(user != null){
    logger.info("UserId : "+user.getId());
    }
    // 接收到请求,记录请求内容
    logger.info("WebLogAspect.doBefore()");
    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    HttpServletRequest request = attributes.getRequest();

    try{
    // 记录下请求内容
    logger.info("URL : " + request.getRequestURL().toString());
    logger.info("HTTP_METHOD : " + request.getMethod());
    logger.info("IP : " + request.getRemoteAddr());
    logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());

    boolean hasFile=false;
    for(Object obj:joinPoint.getArgs()){
    if(obj instanceof MultipartFile){
    hasFile=true;
    }
    }
    if(hasFile){
    logger.info("ARGS : 上传文件接口 ");
    }else{
    logger.info("ARGS : " + JSON.toJSONString(joinPoint.getArgs()));
    }
    }catch(Exception e){
    logger.info("获取请求参数失败");
    }
    Enumeration<String> enu=request.getParameterNames();
    while(enu.hasMoreElements()){
    String paraName=enu.nextElement();
    logger.info("request paraName ARGS"+paraName+": "+request.getParameter(paraName));
    }
    }

    /**
    * 处理完请求,返回内容
    * @param joinPoint
    */
    @AfterReturning(returning="result", pointcut = "webLog()")
    public void doAfterReturning(JoinPoint joinPoint,Object result){
    logger.info("WebLogAspect.doAfterReturning()");
    String res = JSON.toJSONString(result);
    if(res.length()<=2000){
    logger.info("返回数据:"+res);
    }
    logger.info("耗时(毫秒) : " + (System.currentTimeMillis() - startTime.get()));
    }

    }
  • 相关阅读:
    CookieContainer.Add只能加入20个Cookie实例的解决方法
    ELM网络训练模型
    ELM学习(一)
    贝叶斯规律
    异方差性
    分类,回归,聚类
    机器学习中的正则化
    过拟合
    高斯分布——正态分布或钟形分布
    IDC:全球数据库
  • 原文地址:https://www.cnblogs.com/CaptainLin/p/10794192.html
Copyright © 2011-2022 走看看