yzc hace 2 años
padre
commit
aaf7ca8f67

+ 2 - 1
sckw-common/sckw-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -1,3 +1,4 @@
 com.sckw.core.aspect.DaoAspect
 com.sckw.core.exception.GlobalSystemExceptionHandler
-com.sckw.core.web.config.CustomConfig
+com.sckw.core.web.config.CustomConfig
+com.sckw.core.global.GlobalExceptionHandler

+ 2 - 1
sckw-modules/sckw-message/src/main/java/com/sckw/message/controller/SmsController.java

@@ -30,7 +30,8 @@ public class SmsController {
      */
     @PostMapping(value = "/sendVerifyCode", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult sendVerifyCode(@Valid @RequestBody SendSmsVerifyCoderReqVO param) {
-        return smsService.sendVerifyCode(param);
+        smsService.sendVerifyCode(param);
+        return HttpResult.ok();
     }
 
 }

+ 5 - 7
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SmsService.java

@@ -1,9 +1,8 @@
 package com.sckw.message.service;
 
 import com.alibaba.fastjson2.JSON;
+import com.sckw.core.exception.BusinessException;
 import com.sckw.core.utils.NumberUtils;
-import com.sckw.core.web.constant.HttpStatus;
-import com.sckw.core.web.response.HttpResult;
 import com.sckw.message.constant.RedisConstant;
 import com.sckw.message.model.vo.req.SendSmsVerifyCoderReqVO;
 import com.sckw.redis.utils.RedissonUtils;
@@ -30,18 +29,18 @@ public class SmsService {
     private final StreamBridge streamBridge;
 
     /**
+     * @param param
+     * @return com.sckw.core.web.response.HttpResult
      * @desc: 发送验证码
      * @author: yzc
      * @date: 2023-06-13 13:43
-     * @param param
-     * @return com.sckw.core.web.response.HttpResult
      */
-    public HttpResult sendVerifyCode(SendSmsVerifyCoderReqVO param) {
+    public void sendVerifyCode(SendSmsVerifyCoderReqVO param) {
         String phone = param.getPhone();
         // 防重攻击
         String messageSmsVerifyCodeKey = getMessageSmsVerifyCodeKey(phone);
         if (Boolean.TRUE.equals(RedissonUtils.exists(messageSmsVerifyCodeKey))) {
-            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, "请勿频繁获取短信验证码");
+            throw new BusinessException("请勿频繁获取短信验证码");
         }
         SckwSms sckwSms = new SckwSms();
         sckwSms.setTelephone(param.getPhone());
@@ -50,7 +49,6 @@ public class SmsService {
         params.put("code", NumberUtils.createRandomVcode());
         sckwSms.setParams(params);
         streamBridge.send("sckw-sms", JSON.toJSONString(sckwSms));
-        return HttpResult.ok();
     }
 
     private String getMessageSmsVerifyCodeKey(String phone) {

+ 2 - 0
sckw-modules/sckw-message/src/main/resources/bootstrap.yml

@@ -9,3 +9,5 @@ spring:
   main:
     allow-bean-definition-overriding: true
 
+links:
+isBindManyRole:

+ 0 - 154
sckw-modules/sckw-message/src/main/resources/log4j2.xml

@@ -1,154 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration status="info" monitorInterval="30">
-    <properties>
-        <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符 -->
-        <!-- %logger{36} 表示 Logger 名字最长36个字符 -->
-        <property name="LOG_PATTERN"
-                  value="%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%t]}{faint} %clr{%c{1.}}{cyan} %clr{:}{faint} %m%n%xwEx"/>
-        <property name="LOG_WITHOUT_COLOR_PATTERN"
-                  value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${sys:PID}--- [%t] %c{1.} : %m%n%xwEx"/>
-        <property name="LOG_PATH" value="logs/sckw-message"/>
-    </properties>
-    <!--DEBUG<INFO<WARNING<ERROR<CRITICAL-->
-    <!-- 先定义所有的appender(附加器)-->
-    <appenders>
-        <!-- 输出控制台的配置 -->
-        <Console name="Console" target="SYSTEM_OUT">
-            <!-- 输出日志的格式 -->
-            <PatternLayout pattern="${LOG_PATTERN}"/>
-        </Console>
-
-        <!--all级别日志-->
-        <RollingFile name="allFileAppender"
-                     fileName="${LOG_PATH}/all.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/all-%d{yyyy-MM-dd}-%i.log.gz">
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <DefaultRolloverStrategy max="100"/>
-        </RollingFile>
-
-        <!--debug级别日志-->
-        <RollingFile name="debugFileAppender"
-                     fileName="${LOG_PATH}/debug.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log.gz">
-            <Filters>
-                <!--过滤掉info及更高级别日志-->
-                <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
-            </Filters>
-            <!--设置日志格式-->
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <DefaultRolloverStrategy max="100"/>
-        </RollingFile>
-
-        <!--info级别日志-->
-        <RollingFile name="infoFileAppender"
-                     fileName="${LOG_PATH}/info.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz">
-            <Filters>
-                <!--过滤掉warn及更高级别日志-->
-                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
-            </Filters>
-            <!--设置日志格式-->
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <!--<DefaultRolloverStrategy max="100"/>-->
-        </RollingFile>
-
-        <!--warn级别日志-->
-        <RollingFile name="warnFileAppender"
-                     fileName="${LOG_PATH}/warn.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz">
-            <Filters>
-                <!--过滤掉error及更高级别日志-->
-                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
-            </Filters>
-            <!--设置日志格式-->
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <DefaultRolloverStrategy max="100"/>
-        </RollingFile>
-
-        <!--error及更高级别日志-->
-        <RollingFile name="errorFileAppender"
-                     fileName="${LOG_PATH}/error.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz">
-            <!--设置日志格式-->
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <DefaultRolloverStrategy max="100"/>
-        </RollingFile>
-
-        <!--json格式error级别日志-->
-        <RollingFile name="errorJsonAppender"
-                     fileName="${LOG_PATH}/error-json.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/error-json-%d{yyyy-MM-dd}-%i.log.gz">
-            <JSONLayout compact="true" eventEol="true" locationInfo="true"/>
-            <Policies>
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
-            </Policies>
-        </RollingFile>
-
-    </appenders>
-
-    <loggers>
-        <root level="debug">
-            <AppenderRef ref="allFileAppender" level="all"/>
-            <AppenderRef ref="debugFileAppender" level="debug"/>
-            <AppenderRef ref="infoFileAppender" level="info"/>
-            <AppenderRef ref="warnFileAppender" level="warn"/>
-            <AppenderRef ref="errorFileAppender" level="error"/>
-            <AppenderRef ref="errorJsonAppender" level="error"/>
-            <appender-ref ref="Console" level="info"/>
-        </root>
-        <Logger name="org.springframework" level="info"/>
-        <Logger name="com.alibaba" level="info"/>
-        <Logger name="com.baomidou" level="info"/>
-    </loggers>
-
-</configuration>

+ 10 - 0
sckw-modules/sckw-order/pom.xml

@@ -47,6 +47,16 @@
             <artifactId>sckw-common-sentinel</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-common-excel</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-system-api</artifactId>
+        </dependency>
+
         <!--web-->
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 2 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/OrderApplication.java

@@ -6,6 +6,7 @@ import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
 
 /**
  * @desc: 订单服务
@@ -13,6 +14,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  * @date: 2023-06-21 11:46
  */
 @EnableDubbo
+@EnableFeignClients({"com.sckw.*.api.feign"})
 @EnableDiscoveryClient
 @EnableAutoDataSourceProxy
 @SpringBootApplication

+ 3 - 0
sckw-modules/sckw-order/src/main/resources/bootstrap.yml

@@ -8,3 +8,6 @@ spring:
     active: ${DEPLOY_MODE:dev}
   main:
     allow-bean-definition-overriding: true
+
+links:
+isBindManyRole:

+ 0 - 154
sckw-modules/sckw-order/src/main/resources/log4j2.xml

@@ -1,154 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration status="info" monitorInterval="30">
-    <properties>
-        <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符 -->
-        <!-- %logger{36} 表示 Logger 名字最长36个字符 -->
-        <property name="LOG_PATTERN"
-                  value="%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%t]}{faint} %clr{%c{1.}}{cyan} %clr{:}{faint} %m%n%xwEx"/>
-        <property name="LOG_WITHOUT_COLOR_PATTERN"
-                  value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${sys:PID}--- [%t] %c{1.} : %m%n%xwEx"/>
-        <property name="LOG_PATH" value="logs/sckw-order"/>
-    </properties>
-    <!--DEBUG<INFO<WARNING<ERROR<CRITICAL-->
-    <!-- 先定义所有的appender(附加器)-->
-    <appenders>
-        <!-- 输出控制台的配置 -->
-        <Console name="Console" target="SYSTEM_OUT">
-            <!-- 输出日志的格式 -->
-            <PatternLayout pattern="${LOG_PATTERN}"/>
-        </Console>
-
-        <!--all级别日志-->
-        <RollingFile name="allFileAppender"
-                     fileName="${LOG_PATH}/all.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/all-%d{yyyy-MM-dd}-%i.log.gz">
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <DefaultRolloverStrategy max="100"/>
-        </RollingFile>
-
-        <!--debug级别日志-->
-        <RollingFile name="debugFileAppender"
-                     fileName="${LOG_PATH}/debug.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log.gz">
-            <Filters>
-                <!--过滤掉info及更高级别日志-->
-                <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
-            </Filters>
-            <!--设置日志格式-->
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <DefaultRolloverStrategy max="100"/>
-        </RollingFile>
-
-        <!--info级别日志-->
-        <RollingFile name="infoFileAppender"
-                     fileName="${LOG_PATH}/info.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz">
-            <Filters>
-                <!--过滤掉warn及更高级别日志-->
-                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
-            </Filters>
-            <!--设置日志格式-->
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <!--<DefaultRolloverStrategy max="100"/>-->
-        </RollingFile>
-
-        <!--warn级别日志-->
-        <RollingFile name="warnFileAppender"
-                     fileName="${LOG_PATH}/warn.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz">
-            <Filters>
-                <!--过滤掉error及更高级别日志-->
-                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
-            </Filters>
-            <!--设置日志格式-->
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <DefaultRolloverStrategy max="100"/>
-        </RollingFile>
-
-        <!--error及更高级别日志-->
-        <RollingFile name="errorFileAppender"
-                     fileName="${LOG_PATH}/error.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz">
-            <!--设置日志格式-->
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <DefaultRolloverStrategy max="100"/>
-        </RollingFile>
-
-        <!--json格式error级别日志-->
-        <RollingFile name="errorJsonAppender"
-                     fileName="${LOG_PATH}/error-json.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/error-json-%d{yyyy-MM-dd}-%i.log.gz">
-            <JSONLayout compact="true" eventEol="true" locationInfo="true"/>
-            <Policies>
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
-            </Policies>
-        </RollingFile>
-
-    </appenders>
-
-    <loggers>
-        <root level="debug">
-            <AppenderRef ref="allFileAppender" level="all"/>
-            <AppenderRef ref="debugFileAppender" level="debug"/>
-            <AppenderRef ref="infoFileAppender" level="info"/>
-            <AppenderRef ref="warnFileAppender" level="warn"/>
-            <AppenderRef ref="errorFileAppender" level="error"/>
-            <AppenderRef ref="errorJsonAppender" level="error"/>
-            <appender-ref ref="Console" level="info"/>
-        </root>
-        <Logger name="org.springframework" level="info"/>
-        <Logger name="com.alibaba" level="info"/>
-        <Logger name="com.baomidou" level="info"/>
-    </loggers>
-
-</configuration>

+ 199 - 0
sckw-modules/sckw-order/src/main/resources/logback-spring.xml

@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
+<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
+<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
+                 当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
+<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
+<configuration  scan="true" scanPeriod="10 seconds">
+    <contextName>logback</contextName>
+    <springProperty scope="context" name="applicationName" source="spring.application.name" defaultValue="service"/>
+
+    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
+    <property name="log.path" value="/logs/${applicationName}" />
+
+    <!--0. 日志格式和颜色渲染 -->
+    <!-- 彩色日志依赖的渲染类 -->
+    <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(${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}}"/>
+
+    <!--1. 输出到控制台-->
+    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>debug</level>
+        </filter>
+        <encoder>
+            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
+            <!-- 设置字符集 -->
+            <charset>UTF-8</charset>
+        </encoder>
+    </appender>
+
+    <!--2. 输出到文档-->
+    <!-- 2.1 level为 DEBUG 日志,时间滚动输出  -->
+    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 正在记录的日志文档的路径及文档名 -->
+        <file>${log.path}/web_debug.log</file>
+        <!--日志文档输出格式-->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 设置字符集 -->
+        </encoder>
+        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志归档 -->
+            <fileNamePattern>${log.path}/web-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!--日志文档保留天数-->
+            <maxHistory>15</maxHistory>
+        </rollingPolicy>
+        <!-- 此日志文档只记录debug级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>debug</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 2.2 level为 INFO 日志,时间滚动输出  -->
+    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 正在记录的日志文档的路径及文档名 -->
+        <file>${log.path}/web_info.log</file>
+        <!--日志文档输出格式-->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset>
+        </encoder>
+        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 每天日志归档路径以及格式 -->
+            <fileNamePattern>${log.path}/web-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!--日志文档保留天数-->
+            <maxHistory>15</maxHistory>
+        </rollingPolicy>
+        <!-- 此日志文档只记录info级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>info</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 2.3 level为 WARN 日志,时间滚动输出  -->
+    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 正在记录的日志文档的路径及文档名 -->
+        <file>${log.path}/web_warn.log</file>
+        <!--日志文档输出格式-->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${log.path}/web-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!--日志文档保留天数-->
+            <maxHistory>15</maxHistory>
+        </rollingPolicy>
+        <!-- 此日志文档只记录warn级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>warn</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 2.4 level为 ERROR 日志,时间滚动输出  -->
+    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 正在记录的日志文档的路径及文档名 -->
+        <file>${log.path}/web_error.log</file>
+        <!--日志文档输出格式-->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${log.path}/web-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!--日志文档保留天数-->
+            <maxHistory>15</maxHistory>
+        </rollingPolicy>
+        <!-- 此日志文档只记录ERROR级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!--
+        <logger>用来设置某一个包或者具体的某一个类的日志打印级别、
+        以及指定<appender>。<logger>仅有一个name属性,
+        一个可选的level和一个可选的addtivity属性。
+        name:用来指定受此logger约束的某一个包或者具体的某一个类。
+        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
+              还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
+              如果未设置此属性,那么当前logger将会继承上级的级别。
+        addtivity:是否向上级logger传递打印信息。默认是true。
+        <logger name="org.springframework.web" level="info"/>
+        <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
+    -->
+    <!-- hibernate logger -->
+    <logger name="com.atguigu" level="debug" />
+    <!-- Spring framework logger -->
+    <logger name="org.springframework" level="debug" additivity="false"></logger>
+
+
+    <!--
+        使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
+        第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
+        第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:
+        【logging.level.org.mybatis=debug logging.level.dao=debug】
+     -->
+
+    <!--
+        root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
+        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
+        不能设置为INHERITED或者同义词NULL。默认是DEBUG
+        可以包含零个或多个元素,标识这个appender将会添加到这个logger。
+    -->
+
+    <!-- 4. 最终的策略 -->
+    <!-- 4.1 开发环境:打印控制台-->
+    <springProfile name="dev">
+        <logger name="com.sdcm.pmp" level="debug"/>
+    </springProfile>
+
+    <root level="info">
+        <appender-ref ref="CONSOLE" />
+        <appender-ref ref="DEBUG_FILE" />
+        <appender-ref ref="INFO_FILE" />
+        <appender-ref ref="WARN_FILE" />
+        <appender-ref ref="ERROR_FILE" />
+    </root>
+
+    <!-- 4.2 生产环境:输出到文档 -->
+    <springProfile name="pro">
+        <root level="info">
+            <appender-ref ref="CONSOLE" />
+            <appender-ref ref="DEBUG_FILE" />
+            <appender-ref ref="INFO_FILE" />
+            <appender-ref ref="ERROR_FILE" />
+            <appender-ref ref="WARN_FILE" />
+        </root>
+    </springProfile>
+
+</configuration>

+ 10 - 0
sckw-modules/sckw-product/pom.xml

@@ -48,6 +48,16 @@
             <artifactId>sckw-common-sentinel</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-common-excel</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-system-api</artifactId>
+        </dependency>
+
         <!--web-->
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 2 - 7
sckw-modules/sckw-product/src/main/java/com/sckw/product/ProductApplication.java

@@ -14,19 +14,14 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
  * @date: 2023-06-21 11:46
  */
 @EnableDubbo
+@EnableFeignClients({"com.sckw.*.api.feign"})
 @EnableDiscoveryClient
 @EnableAutoDataSourceProxy
 @SpringBootApplication
 public class ProductApplication {
 
     public static void main(String[] args) {
-        // 关闭nacos日志
-        System.setProperty("nacos.logging.default.config.enabled", "false");
-        try {
-            SpringApplication.run(ProductApplication.class, args);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
+        SpringApplication.run(ProductApplication.class, args);
     }
 
 

+ 2 - 0
sckw-modules/sckw-product/src/main/resources/bootstrap.yml

@@ -9,3 +9,5 @@ spring:
   main:
     allow-bean-definition-overriding: true
 
+links:
+isBindManyRole:

+ 0 - 154
sckw-modules/sckw-product/src/main/resources/log4j2.xml

@@ -1,154 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration status="info" monitorInterval="30">
-    <properties>
-        <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符 -->
-        <!-- %logger{36} 表示 Logger 名字最长36个字符 -->
-        <property name="LOG_PATTERN"
-                  value="%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%t]}{faint} %clr{%c{1.}}{cyan} %clr{:}{faint} %m%n%xwEx"/>
-        <property name="LOG_WITHOUT_COLOR_PATTERN"
-                  value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${sys:PID}--- [%t] %c{1.} : %m%n%xwEx"/>
-        <property name="LOG_PATH" value="logs/sckw-product"/>
-    </properties>
-    <!--DEBUG<INFO<WARNING<ERROR<CRITICAL-->
-    <!-- 先定义所有的appender(附加器)-->
-    <appenders>
-        <!-- 输出控制台的配置 -->
-        <Console name="Console" target="SYSTEM_OUT">
-            <!-- 输出日志的格式 -->
-            <PatternLayout pattern="${LOG_PATTERN}"/>
-        </Console>
-
-        <!--all级别日志-->
-        <RollingFile name="allFileAppender"
-                     fileName="${LOG_PATH}/all.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/all-%d{yyyy-MM-dd}-%i.log.gz">
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <DefaultRolloverStrategy max="100"/>
-        </RollingFile>
-
-        <!--debug级别日志-->
-        <RollingFile name="debugFileAppender"
-                     fileName="${LOG_PATH}/debug.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log.gz">
-            <Filters>
-                <!--过滤掉info及更高级别日志-->
-                <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
-            </Filters>
-            <!--设置日志格式-->
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <DefaultRolloverStrategy max="100"/>
-        </RollingFile>
-
-        <!--info级别日志-->
-        <RollingFile name="infoFileAppender"
-                     fileName="${LOG_PATH}/info.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz">
-            <Filters>
-                <!--过滤掉warn及更高级别日志-->
-                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
-            </Filters>
-            <!--设置日志格式-->
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <!--<DefaultRolloverStrategy max="100"/>-->
-        </RollingFile>
-
-        <!--warn级别日志-->
-        <RollingFile name="warnFileAppender"
-                     fileName="${LOG_PATH}/warn.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz">
-            <Filters>
-                <!--过滤掉error及更高级别日志-->
-                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
-            </Filters>
-            <!--设置日志格式-->
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <DefaultRolloverStrategy max="100"/>
-        </RollingFile>
-
-        <!--error及更高级别日志-->
-        <RollingFile name="errorFileAppender"
-                     fileName="${LOG_PATH}/error.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz">
-            <!--设置日志格式-->
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <DefaultRolloverStrategy max="100"/>
-        </RollingFile>
-
-        <!--json格式error级别日志-->
-        <RollingFile name="errorJsonAppender"
-                     fileName="${LOG_PATH}/error-json.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/error-json-%d{yyyy-MM-dd}-%i.log.gz">
-            <JSONLayout compact="true" eventEol="true" locationInfo="true"/>
-            <Policies>
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
-            </Policies>
-        </RollingFile>
-
-    </appenders>
-
-    <loggers>
-        <root level="debug">
-            <AppenderRef ref="allFileAppender" level="all"/>
-            <AppenderRef ref="debugFileAppender" level="debug"/>
-            <AppenderRef ref="infoFileAppender" level="info"/>
-            <AppenderRef ref="warnFileAppender" level="warn"/>
-            <AppenderRef ref="errorFileAppender" level="error"/>
-            <AppenderRef ref="errorJsonAppender" level="error"/>
-            <appender-ref ref="Console" level="info"/>
-        </root>
-        <Logger name="org.springframework" level="info"/>
-        <Logger name="com.alibaba" level="info"/>
-        <Logger name="com.baomidou" level="info"/>
-    </loggers>
-
-</configuration>

+ 199 - 0
sckw-modules/sckw-product/src/main/resources/logback-spring.xml

@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
+<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
+<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
+                 当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
+<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
+<configuration  scan="true" scanPeriod="10 seconds">
+    <contextName>logback</contextName>
+    <springProperty scope="context" name="applicationName" source="spring.application.name" defaultValue="service"/>
+
+    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
+    <property name="log.path" value="/logs/${applicationName}" />
+
+    <!--0. 日志格式和颜色渲染 -->
+    <!-- 彩色日志依赖的渲染类 -->
+    <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(${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}}"/>
+
+    <!--1. 输出到控制台-->
+    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>debug</level>
+        </filter>
+        <encoder>
+            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
+            <!-- 设置字符集 -->
+            <charset>UTF-8</charset>
+        </encoder>
+    </appender>
+
+    <!--2. 输出到文档-->
+    <!-- 2.1 level为 DEBUG 日志,时间滚动输出  -->
+    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 正在记录的日志文档的路径及文档名 -->
+        <file>${log.path}/web_debug.log</file>
+        <!--日志文档输出格式-->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 设置字符集 -->
+        </encoder>
+        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志归档 -->
+            <fileNamePattern>${log.path}/web-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!--日志文档保留天数-->
+            <maxHistory>15</maxHistory>
+        </rollingPolicy>
+        <!-- 此日志文档只记录debug级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>debug</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 2.2 level为 INFO 日志,时间滚动输出  -->
+    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 正在记录的日志文档的路径及文档名 -->
+        <file>${log.path}/web_info.log</file>
+        <!--日志文档输出格式-->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset>
+        </encoder>
+        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 每天日志归档路径以及格式 -->
+            <fileNamePattern>${log.path}/web-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!--日志文档保留天数-->
+            <maxHistory>15</maxHistory>
+        </rollingPolicy>
+        <!-- 此日志文档只记录info级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>info</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 2.3 level为 WARN 日志,时间滚动输出  -->
+    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 正在记录的日志文档的路径及文档名 -->
+        <file>${log.path}/web_warn.log</file>
+        <!--日志文档输出格式-->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${log.path}/web-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!--日志文档保留天数-->
+            <maxHistory>15</maxHistory>
+        </rollingPolicy>
+        <!-- 此日志文档只记录warn级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>warn</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 2.4 level为 ERROR 日志,时间滚动输出  -->
+    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 正在记录的日志文档的路径及文档名 -->
+        <file>${log.path}/web_error.log</file>
+        <!--日志文档输出格式-->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${log.path}/web-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!--日志文档保留天数-->
+            <maxHistory>15</maxHistory>
+        </rollingPolicy>
+        <!-- 此日志文档只记录ERROR级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!--
+        <logger>用来设置某一个包或者具体的某一个类的日志打印级别、
+        以及指定<appender>。<logger>仅有一个name属性,
+        一个可选的level和一个可选的addtivity属性。
+        name:用来指定受此logger约束的某一个包或者具体的某一个类。
+        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
+              还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
+              如果未设置此属性,那么当前logger将会继承上级的级别。
+        addtivity:是否向上级logger传递打印信息。默认是true。
+        <logger name="org.springframework.web" level="info"/>
+        <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
+    -->
+    <!-- hibernate logger -->
+    <logger name="com.atguigu" level="debug" />
+    <!-- Spring framework logger -->
+    <logger name="org.springframework" level="debug" additivity="false"></logger>
+
+
+    <!--
+        使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
+        第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
+        第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:
+        【logging.level.org.mybatis=debug logging.level.dao=debug】
+     -->
+
+    <!--
+        root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
+        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
+        不能设置为INHERITED或者同义词NULL。默认是DEBUG
+        可以包含零个或多个元素,标识这个appender将会添加到这个logger。
+    -->
+
+    <!-- 4. 最终的策略 -->
+    <!-- 4.1 开发环境:打印控制台-->
+    <springProfile name="dev">
+        <logger name="com.sdcm.pmp" level="debug"/>
+    </springProfile>
+
+    <root level="info">
+        <appender-ref ref="CONSOLE" />
+        <appender-ref ref="DEBUG_FILE" />
+        <appender-ref ref="INFO_FILE" />
+        <appender-ref ref="WARN_FILE" />
+        <appender-ref ref="ERROR_FILE" />
+    </root>
+
+    <!-- 4.2 生产环境:输出到文档 -->
+    <springProfile name="pro">
+        <root level="info">
+            <appender-ref ref="CONSOLE" />
+            <appender-ref ref="DEBUG_FILE" />
+            <appender-ref ref="INFO_FILE" />
+            <appender-ref ref="ERROR_FILE" />
+            <appender-ref ref="WARN_FILE" />
+        </root>
+    </springProfile>
+
+</configuration>