whycxzp
2021-05-11 1f4b34448a1cb470d170e9d9462aeec2d216cf55
更新全局异常捕捉处理
5个文件已添加
5个文件已修改
231 ■■■■ 已修改文件
src/main/java/com/whyc/controller/TestController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/Response.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/exception/first/CodeAndMsg.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/exception/first/CustomExceptionResultHandler.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/exception/first/DefinedException.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/exception/second/Assert.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/AlarmRuleService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/config/application.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/config/logback-spring.xml 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/config/logback.xml 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/TestController.java
@@ -2,10 +2,13 @@
import com.whyc.dto.Response;
import com.whyc.dto.multiTree.MultiTree;
import com.whyc.exception.first.CustomExceptionResultHandler;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;
@@ -14,7 +17,8 @@
 */
@RestController
@RequestMapping("test")
@ApiIgnore
@Api(tags = "test")
@Slf4j
public class TestController {
    @GetMapping("test")
@@ -27,4 +31,15 @@
        MultiTree tree = new MultiTree().saveAsTree(dateArr);
        return new Response<MultiTree>().set(1,tree);
    }
    @GetMapping("test2")
    @ApiOperation(value = "test2")
    public Response test2(@RequestParam Integer num){
        System.out.println("执行了test2的方法1");
        log.info("哈哈");
        byte b = num.byteValue();
        System.out.println("执行了test2的方法");
        return new Response().set(1,num);
    }
}
src/main/java/com/whyc/dto/Response.java
@@ -1,5 +1,6 @@
package com.whyc.dto;
import com.whyc.exception.first.CodeAndMsg;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiResponse;
src/main/java/com/whyc/exception/first/CodeAndMsg.java
New file
@@ -0,0 +1,30 @@
package com.whyc.exception.first;
public enum CodeAndMsg {
    SUCCESS(1,"SUCCESS"),
    FAIL(0,"exception");
    private int code;
    private String message;
    CodeAndMsg(int code, String message) {
        this.code = code;
        this.message = message;
    }
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
}
src/main/java/com/whyc/exception/first/CustomExceptionResultHandler.java
New file
@@ -0,0 +1,37 @@
package com.whyc.exception.first;
import com.whyc.dto.Response;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
 * 1.针对RestController层捕捉异常,结果统一返回
 * 2.异常日志,本地独立部署测试日志记录 TODO
 */
@Slf4j
@RestControllerAdvice(annotations = RestController.class)
public class CustomExceptionResultHandler<T> {
    @ExceptionHandler(DefinedException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public Response sendErrorResponse2Defined(Exception exception){
        return new Response().set(0,((DefinedException)exception).getMessage());
    }
    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public Response sendErrorResponse2System(Exception exception){
        exception.printStackTrace();
        if(exception instanceof DefinedException) {
            return this.sendErrorResponse2Defined(exception);
        }
        CodeAndMsg.FAIL.setMessage(exception.toString());
        log.error("发生异常:{}",exception.toString());
        return new Response().setMsg(0,exception.toString());
    }
}
src/main/java/com/whyc/exception/first/DefinedException.java
New file
@@ -0,0 +1,21 @@
package com.whyc.exception.first;
/**
 * 自定义异常
 */
public class DefinedException  extends  RuntimeException{
    private String message;
    public DefinedException(String message){
        this.message = message;
    }
    @Override
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
}
src/main/java/com/whyc/exception/second/Assert.java
New file
@@ -0,0 +1,9 @@
package com.whyc.exception.second;
/**
 * 采用Assert处理全局异常
 */
public interface Assert {
}
src/main/java/com/whyc/service/AlarmRuleService.java
@@ -31,7 +31,7 @@
     * @return
     */
    public Response add(AlarmRule alarmRule) {
        //查询同一字段,同一个under或者over,是否已经存在记录
        //查询同一字段,同一个under(过高)或者over(过低),是否已经存在记录
        //如果存在了记录,则按照 一般,重要,严重区分:一般1,严重2,...
        mapper.insert(alarmRule);
        return new Response().setMsg(1,"新增成功");
src/main/resources/config/application.yml
@@ -60,3 +60,5 @@
knife:
  enable: true
#  enable: fase
log.path:
  F:\app\backlog
src/main/resources/config/logback-spring.xml
New file
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<!--    <property name="LOG_HOME" value="F:\app\logs" />-->
    <property resource="application.yml"/>
    <springProperty scope="context" name="LOG_HOME" source="log.path" />
    <!--控制台日志, 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符-->
            <pattern>%-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
    <!--文件日志, 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <fileNamePattern>${LOG_HOME}/logback.%d{yyyy-MM-dd}.log</fileNamePattern>
<!--            <FileNamePattern>F:/app/logs/logback.%d{yyyy-MM-dd}.log</FileNamePattern>-->
            <!--日志文件保留天数-->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>10MB</maxFileSize>
        </triggeringPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!--mybatis log configure-->
    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
    <!-- 开发环境日志输出级别 -->
    <root level="info">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE"/>
    </root>
</configuration>
src/main/resources/config/logback.xml
@@ -1,50 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<configuration  scan="true" scanPeriod="60 seconds" debug="false" >
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="../logs" />
    <!--控制台日志, 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符-->
            <pattern>%-5level %logger{50} - %msg%n</pattern>
    <property name="LOG_HOME" value="F:/app/logs" />
    <contextName>scpSale-Server</contextName>
    <!-- 控制点输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>
    <!--文件日志, 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 按照每天生成日志文件 -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/logback.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <fileNamePattern>${LOG_HOME}/info.%d{yyyy-MM-dd}</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!--mybatis log configure-->
    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
    <!-- 开发环境日志输出级别 -->
    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE"/>
    <root level="INFO">
        <appender-ref ref="console" />
        <appender-ref ref="file" />
    </root>
</configuration>
</configuration>