Przeglądaj źródła

公共方法,异常处理类

Progr1mmer 6 lat temu
rodzic
commit
379dacfc07

+ 6 - 6
common/common-web/src/main/java/com/yihu/jw/web/handler/GlobalExceptionHandler.java

@ -34,29 +34,29 @@ public class GlobalExceptionHandler {
    public BaseEnvelop handle(HttpServletResponse response, Exception e) throws IOException {
        BaseEnvelop envelop = new BaseEnvelop();
        if (e instanceof NoHandlerFoundException) {
            response.setStatus(HttpStatus.NOT_FOUND.value());
            //response.setStatus(HttpStatus.NOT_FOUND.value());
            envelop.setStatus(HttpStatus.NOT_FOUND.value());
            envelop.setMessage(e.getMessage());
        } else if (e instanceof HttpRequestMethodNotSupportedException){
            response.setStatus(HttpStatus.METHOD_NOT_ALLOWED.value());
            //response.setStatus(HttpStatus.METHOD_NOT_ALLOWED.value());
            envelop.setStatus(HttpStatus.METHOD_NOT_ALLOWED.value());
            envelop.setMessage(e.getMessage());
        } else if (e instanceof MissingServletRequestParameterException) {
            response.setStatus(HttpStatus.BAD_REQUEST.value());
            //response.setStatus(HttpStatus.BAD_REQUEST.value());
            envelop.setStatus(HttpStatus.BAD_REQUEST.value());
            envelop.setMessage(e.getMessage());
        } else if (e instanceof FeignException) { //执行Feign失败的时候默认当前服务做为网关执行请求的时候,从上游服务器接收到无效的响应
            response.setStatus(HttpStatus.BAD_GATEWAY.value());
            //response.setStatus(HttpStatus.BAD_GATEWAY.value());
            envelop.setStatus(HttpStatus.BAD_GATEWAY.value());
            envelop.setMessage("Execute Feign: " + e.getMessage());
        } else if (e instanceof ApiException) { //业务逻辑的异常默认为请求成功,但是前端需要判断成功标识
            ApiException apiException = (ApiException) e;
            response.setStatus(apiException.httpStatus().value());
            //response.setStatus(apiException.httpStatus().value());
            envelop.setStatus(apiException.errorCode());
            envelop.setMessage(e.getMessage());
            return envelop; //此异常不进行日志记录
        } else {
            response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
            //response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
            envelop.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
            envelop.setMessage(e.getMessage());
        }

+ 88 - 0
common/common-web/src/main/resources/logback-spring.xml

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- EHR全局异常日志处理配置,包含每个微服务的默认日志配置,
如果有其他日志处理需求,请拷贝此文件,并按照以下说明(73行)进行配置 -->
<configuration scan="true">
    <springProperty scope="context" name="appName" source="spring.application.name" />
	<property name="log_home" value="/wlyy-logs/${appName}" />
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr([${appName}]){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
    <!-- 文件日志格式 -->
    <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [${appName}] %-5level --- [%thread] - %logger{36}: %msg%n" />
    <!-- Standard output -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
			<charset class="java.nio.charset.Charset">UTF-8</charset>
		</encoder>
	</appender>
    <!-- Api Log Start -->
    <appender name="ApiInfoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_home}/api/info/%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="ApiWarnFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_home}/api/warn/%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="ApiErrorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_home}/api/error/%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <logger name="com.yihu.jw.web.handler.GlobalExceptionHandler" level="WARN" additivity="false">
        <appender-ref ref="console" />
        <appender-ref ref="ApiInfoFile" />
        <appender-ref ref="ApiWarnFile" />
        <appender-ref ref="ApiErrorFile" />
    </logger>
    <!-- Api Log End -->
    <!-- 如果微服务纳入全局异常处理,请勿修改以上代码,有新的日志处理请在以下追加!!! -->
	<root level="INFO">
        <appender-ref ref="console" />
	</root>
</configuration>