统一的基础异常处理和日志处理
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中的控制台日志输出变成了彩色的: