zoukankan      html  css  js  c++  java
  • 全局捕获异常

    全局捕获异常:整个web请求项目全局捕获异常

    应用场景:使用Aop技术,采用异常通知

    /**
     *
     *@author<a href="mailto:lei.tan@vtradex.net">谭磊</a>
     *@since2019-01-15 22:37
     *全局捕获异常案例
     *1,捕获返回json格式
     *2,捕获返回页面
     */
    @ControllerAdvice(basePackages="com.example.comtroller")
    public class GlobalExceptionHandler {
        
           @ResponseBody//返回json格式
           //modelAndView  返回页面
           @ExceptionHandler(RuntimeException.class)//拦截运行时异常
           public Map<String, Object> errorJson(){
      //实际开发中,怎么将错误记录在日志中 Map
    <String, Object> map=new HashMap<String, Object>(); map.put("errorcode", "500"); map.put("errormessage", "系统错误"); return map; } }

    @ExceptionHandler表示拦截异常

        @ControllerAdivce是controller的一个辅助类,最常用的就是作为全局异常处理

        @ControllerAdivce 可以指定扫描范围

        @ControllerAdivce 约定了几种可行的返回值,如果是直接返回model类的话,需要

    @ResponseBody进行json转换

                 返回String,表示跳转到某个view

        返回modelAndView

        返回model + @ResponseBody

    Log4j日志管理

    1.)

       1. 新建log4配置文件(resources)

       2.导入jar包

       3.

    @Controller
    public class JspController {
         private  static  final Logger logger =LoggerFactory.getLogger(JspController.class);
         @RequestMapping("/jspindex")
         public String index() {
            logger.info("404  集成log4j日志错误");
            
            return "index";
        }
    }

    2)Maven依赖

    使用Aop统一处理Web请求日志

     <!-- Springboot 整合AOP -->
             <dependency>
                <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-aop</artifactId>
             </dependency>
    package com.example.aop;
    
    import java.util.Enumeration;
    
    import javax.servlet.http.HttpServletRequest;
    
    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 com.example.comtroller.JspController;
    
    /**
     *
     *@author<a href="mailto:lei.tan@vtradex.net">谭磊</a>
     *@since2019-01-22 21:24
     */
    
    @Aspect
    @Component
    public class WebLogAspect {
         private  static  final Logger logger =LoggerFactory.getLogger(JspController.class);
         
         @Pointcut("execution(public * com.example.controller.*.*(..))")
         public void weblog() {
             
         }
         /**
          * 使用Aop的前置通知
          *tanlei
          *2019年1月22日 
          *
          */
         @Before("weblog()")
         public  void deBefore(JoinPoint joinPoint) throws Throwable{
             //接收到请求,记录请求内容
             ServletRequestAttributes attributes=(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
             HttpServletRequest request=attributes.getRequest();
             //记录下请求内容
             logger.info("URL:"+request.getRequestURI().toString());
             logger.info("HTTP_METHOD:"+request.getMethod());
             logger.info("IP:"+request.getRemoteAddr());
             Enumeration<String> enu=request.getParameterNames();
             while(enu.hasMoreElements()) {
                 String name =(String)enu.nextElement();
                 logger.info("name:{},value:{}",name,request.getParameter(name));
             }
         }
         //传统写在磁盘上有很大缺点,分布式情况  服务器集群呢?20台服务器,分布式日志收集
         
         /**
          * 后置通知
          *tanlei
          *2019年1月22日 
          *
          */
         @AfterReturning(returning="ret",pointcut="weblog()")
         public void  doAfterReturning(Object ret)throws Throwable {
             //处理完请求,返回内容
             logger.info("Response:"+ret);
             
         }
         
         
    }
  • 相关阅读:
    C# Dev PropertyGrid
    C# PropertyGrid控件应用心得
    FileWriter不覆盖
    FileWriter
    java试题
    Java线程池
    java自带线程池和队列详细讲解
    HashMap练习题
    Map集合
    java指定
  • 原文地址:https://www.cnblogs.com/tanlei-sxs/p/10274779.html
Copyright © 2011-2022 走看看