统一的基础异常处理和日志处理


1.全局异常的处理

新建个GlobalExceptionHandler处理异常

@ControllerAdvice
public class GlobalExceptionHandler {

    //指定出现什么异常执行这个方法
    @ExceptionHandler(Exception.class)
    @ResponseBody //返回数据
    public R error(Exception e){
        e.printStackTrace();
        return R.error().message("执行了全局异常处理");
    }
}

然后到代码中去手动加个异常尝试是否能处理异常
到执行的代码方法中加入int i = 10/0;
然后执行代码,到swagger中选择运行该方法


可以发现成功的执行了全局异常处理

2.特殊异常的处理

例如刚刚这个异常名字为ArithmeticException异常,我们可以对他进行特殊处理。
在GlobalExceptionHandler中加入特殊异常处理的代码

//特殊异常执行这个方法
    @ExceptionHandler(ArithmeticException.class)
    @ResponseBody //返回数据
    public R error(ArithmeticException e){
        e.printStackTrace();
        return R.error().message("对ArithmeticException异常进行处理");
    }

然后运行代码,进入swagger测试,可以发现成功执行了特殊异常的处理


3.自定义异常的处理

自定义的异常处理需要自己捕获异常
首先,新建一个自定义异常类GuliException
然后在类中定义好异常状态码和异常信息

@Data
@AllArgsConstructor
@NoArgsConstructor
public class GuliException extends RuntimeException{
    //状态码
    private Integer code;
    //异常信息
    private String msg;
}

然后在GlobalExceptionHandler中加入以下代码:

//自定义出现什么异常执行这个方法
    @ExceptionHandler(GuliException.class)
    @ResponseBody //返回数据
    public R error(GuliException e){
        e.printStackTrace();
        return R.error().code(e.getCode()).message(e.getMsg());
    }

然后在实现方法里将int i = 10/0改成

try {
            int i  = 10 / 0 ;
        }catch (Exception e){
            throw new GuliException(2333,"执行了一个自定义异常。。。");
        }

然后启动代码,到swagger中运行该方法


可以看到自定义异常处理成功处理了异常。

4.日志处理与彩色日志

日志的级别为: ERROR WARN INFO DEBUG

日志的级别可以通过在配置文件里设置logging.level.root = WARN设置。

我们不仅要把日志输出到控制台,还可以输出到文件中,这就需要用到日志工具了
log4j和logback日志工具

(1)删除application.properties中的日志配置

(2) 在resources中创建 logback-spring.xml

点击查看logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>

    
    
    
    

    logback
    
    

    
    
    
    
    
    
    
    


    
    
        
        
        
            INFO
        
        
            ${CONSOLE_LOG_PATTERN}
            
            UTF-8
        
    


    

    
    
        
        ${log.path}/log_info.log
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            UTF-8
        
        
        
            
            ${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log
            
                100MB
            
            
            15
        
        
        
            INFO
            ACCEPT
            DENY
        
    

    
    
        
        ${log.path}/log_warn.log
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            UTF-8 
        
        
        
            ${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log
            
                100MB
            
            
            15
        
        
        
            warn
            ACCEPT
            DENY
        
    


    
    
        
        ${log.path}/log_error.log
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            UTF-8 
        
        
        
            ${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log
            
                100MB
            
            
            15
        
        
        
            ERROR
            ACCEPT
            DENY
        
    

    
    
    
    
        
        

        
        
            
            
            
            
        
    


    
    

        
            
            
            
            
            
        
    


然后运行代码,可以看见生成了日志文件


然后在自定义异常中加入log.error(e.getMessage());即可把error日志输入到error日志文件中


同时也能发现,idea中的控制台日志输出变成了彩色的: