首页 > 编程语言 > 详细

SpringBoot框架:日志处理

时间:2020-03-18 19:38:41      阅读:54      评论:0      收藏:0      [点我收藏+]

SpringBoot框架:日志处理



 

 

  • 日志访问内容

    • 请求 url
    • 访问者 ip
    • 调用方法 classMethod
    • 参数 args
    • 返回的内容
  • 记录日志类
    • com.xxxx下新建文件夹 aspect,用来存储一些 aop 切面,在里面定义一个 LogAspect类,用来返回以上所要返回的一些数据。
      @Aspect     // 创建切面
      @Component      // 开启组件扫描
      public class LogAspect {
      
          private final org.slf4j.Logger logger = LoggerFactory.getLogger(this.getClass());
      
          // @Pointcut声明切面    execution指定拦截哪些类 --> web 下的所有方法
          @Pointcut("execution(* com.skgxsn.blog_idea2017.web.*.*(..))")
          public void log() {
          }
      
          // 在切面之前执行
          @Before("log()")
          public void doBefore(JoinPoint joinPoint) {
              ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
              HttpServletRequest request = attributes.getRequest();
              String url = request.getRequestURL().toString();
              String ip = request.getRemoteAddr();
              String classMethod = joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName();
              Object[] args = joinPoint.getArgs();
              RequestLog requestLog = new RequestLog(url, ip, classMethod, args);
              logger.info("Request : {}", requestLog);
          }
      
          // 在切面之后执行
          @After("log()")
          public void doAfter() {
      //        logger.info("-------- doAfter -------------");
      
          }
      
          // 拦截方法返回的内容
          @AfterReturning(returning = "result", pointcut = "log()")
          public void doAfterReturn(Object result) {
              logger.info("Result : {}", result);
          }
      
          // 定义返回方法的内部类
          private class RequestLog {
              private String url;
              private String ip;
              private String classMethod;
              private Object[] args;
      
              public RequestLog(String url, String ip, String classMethed, Object[] args) {
                  this.url = url;
                  this.ip = ip;
                  this.classMethod = classMethed;
                  this.args = args;
              }
      
              @Override
              public String toString() {
                  return "RequestLog{" +
                          "url=‘" + url + ‘\‘‘ +
                          ", ip=‘" + ip + ‘\‘‘ +
                          ", classMethod=‘" + classMethod + ‘\‘‘ +
                          ", args=" + Arrays.toString(args) +
                          ‘}‘;
              }
          }
      }

       

  • IndexController.java中指定路径:
    @Controller
    public class IndexController {
    
        @GetMapping("/{id}/{name}")
        public String index(@PathVariable Integer id, @PathVariable String name) {
    //        int i = 9/0;
    //        String blog = null;
    //        if (blog == null) {
    //            throw  new NotFoundException("Blog not found");
    //        }
            System.out.println("----------- Index -------------");
            return "index";
        }
    }

     

 

SpringBoot框架:日志处理

原文:https://www.cnblogs.com/skygrass0531/p/12519500.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!