Browse Source

门店模块

liyuan 2 weeks ago
parent
commit
8ce1fd06d6

+ 21 - 0
blade-service-api/gubersail-shop-app-api/pom.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springblade</groupId>
+        <artifactId>blade-service-api</artifactId>
+        <version>2.8.2.RELEASE</version>
+    </parent>
+
+    <groupId>com.gubersail</groupId>
+    <artifactId>gubersail-shop-app-api</artifactId>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+</project>

+ 4 - 0
blade-service-api/gubersail-shop-app-api/src/main/java/com/gubersail/shop/app/api/Test.java

@@ -0,0 +1,4 @@
+package com.gubersail.shop.app.api;
+
+public class Test {
+}

+ 1 - 0
blade-service-api/pom.xml

@@ -26,6 +26,7 @@
         <module>gubersail-dealer-admin-api</module>
         <module>blade-factory-api</module>
         <module>gubersail-dealer-app-api</module>
+        <module>gubersail-shop-app-api</module>
     </modules>
 
     <dependencies>

+ 51 - 0
blade-service/gubersail-shop-app/pom.xml

@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springblade</groupId>
+        <artifactId>blade-service</artifactId>
+        <version>2.8.2.RELEASE</version>
+    </parent>
+
+    <groupId>com.gubersail</groupId>
+    <artifactId>gubersail-shop-app</artifactId>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-service-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-user-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-system-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-boot</artifactId>
+        </dependency>
+
+
+
+    </dependencies>
+
+
+</project>

+ 24 - 0
blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/GubersailShopAppApplication.java

@@ -0,0 +1,24 @@
+package com.gubersail.shop.app;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springblade.core.cloud.feign.EnableBladeFeign;
+import org.springblade.core.launch.BladeApplication;
+import org.springframework.cloud.client.SpringCloudApplication;
+import org.springframework.context.annotation.ComponentScan;
+
+/**
+ * @author Rain
+ */
+@EnableBladeFeign
+@SpringCloudApplication
+@ComponentScan(value = {"com.gubersail.shop.app", "org.springblade.common.**"})
+@MapperScan({"com.gubersail.shop.app.**.mapper"})
+public class GubersailShopAppApplication {
+
+
+	public static void main(String[] args) {
+		BladeApplication.run("gubersail-shop-app", GubersailShopAppApplication.class, args);
+	}
+
+
+}

+ 10 - 0
blade-service/gubersail-shop-app/src/main/resources/application-dev.yml

@@ -0,0 +1,10 @@
+#服务器端口
+server:
+  port: 9200
+
+#数据源配置
+spring:
+  datasource:
+    url: ${blade.datasource.dev.url}
+    username: ${blade.datasource.dev.username}
+    password: ${blade.datasource.dev.password}

+ 11 - 0
blade-service/gubersail-shop-app/src/main/resources/application-prod.yml

@@ -0,0 +1,11 @@
+#服务器端口
+server:
+  port: 9200
+
+#数据源配置
+spring:
+  datasource:
+    url: ${blade.datasource.prod.url}
+    username: ${blade.datasource.prod.username}
+    password: ${blade.datasource.prod.password}
+

+ 10 - 0
blade-service/gubersail-shop-app/src/main/resources/application-test.yml

@@ -0,0 +1,10 @@
+#服务器端口
+server:
+  port: 9200
+
+#数据源配置
+spring:
+  datasource:
+    url: ${blade.datasource.test.url}
+    username: ${blade.datasource.test.username}
+    password: ${blade.datasource.test.password}

+ 272 - 0
blade-service/gubersail-shop-app/src/main/resources/log/logback-dev.xml

@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds">
+    <!-- 自定义参数监听 -->
+    <contextListener class="org.springblade.core.log.listener.LoggerStartupListener"/>
+    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
+
+    <!-- 彩色日志依赖的渲染类 -->
+    <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}}"/>
+
+    <!-- 定义日志存储目录 -->
+    <property name="LOG_DIR" value="logs" />
+
+    <!-- 控制台输出 -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+            <charset>utf8</charset>
+        </encoder>
+    </appender>
+
+    <!-- 按日期滚动的文件Appender -->
+    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 当前正在写入的日志文件路径 -->
+        <file>${LOG_DIR}/${springAppName:-application}.log</file>
+        <!-- 基于时间的滚动策略 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 归档日志文件的命名模式,按天分割 -->
+            <fileNamePattern>${LOG_DIR}/${springAppName:-application}.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 保留日志的天数,超过此天数的旧日志文件会被自动删除 -->
+            <maxHistory>30</maxHistory>
+            <!-- 可选:总日志文件大小限制,防止日志占满磁盘 -->
+            <totalSizeCap>3GB</totalSizeCap>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!-- 使用详细的日志格式 -->
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{40} - %msg%n</pattern>
+            <charset>utf8</charset>
+        </encoder>
+    </appender>
+
+    <if condition='property("ELK_MODE").toUpperCase().contains("TRUE")'>
+        <then>
+            <!-- 推送日志至elk -->
+            <appender name="STDOUT_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+                <destination>${DESTINATION}</destination>
+                <!-- 日志输出编码 -->
+                <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+                    <providers>
+                        <timestamp>
+                            <timeZone>UTC</timeZone>
+                        </timestamp>
+                        <pattern>
+                            <pattern>
+                                {
+                                "traceId": "%X{traceId}",
+                                "requestId": "%X{requestId}",
+                                "accountId": "%X{accountId}",
+                                "tenantId": "%X{tenantId}",
+                                "logLevel": "%level",
+                                "serviceName": "${springAppName:-SpringApp}",
+                                "pid": "${PID:-}",
+                                "thread": "%thread",
+                                "class": "%logger{40}",
+                                "line":"%L",
+                                "message": "%message"
+                                }
+                            </pattern>
+                        </pattern>
+                        <mdc/>
+                        <stackTrace/>
+                    </providers>
+                </encoder>
+            </appender>
+        </then>
+    </if>
+
+    <!-- 日志输出级别 -->
+    <root level="DEBUG">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="FILE"/> <!-- 新增的文件输出 -->
+        <appender-ref ref="${STDOUT_APPENDER}"/>
+    </root>
+
+    <!-- 以下为各种logger的级别配置,保持不变 -->
+    <logger name="net.sf.ehcache" level="DEBUG"/>
+    <logger name="druid.sql" level="DEBUG"/>
+
+    <!-- MyBatis log configure -->
+    <logger name="com.apache.ibatis" level="DEBUG"/>
+    <logger name="org.mybatis.spring" level="DEBUG"/>
+    <logger name="java.sql.Connection" level="DEBUG"/>
+    <logger name="java.sql.Statement" level="DEBUG"/>
+    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
+
+    <!-- 减少部分debug日志 -->
+    <logger name="druid.sql" level="DEBUG"/>
+    <logger name="org.apache.shiro" level="DEBUG"/>
+    <logger name="org.mybatis.spring" level="DEBUG"/>
+    <logger name="org.springframework" level="DEBUG"/>
+    <logger name="org.springframework.context" level="DEBUG"/>
+    <logger name="org.springframework.beans" level="DEBUG"/>
+    <logger name="com.baomidou.mybatisplus" level="DEBUG"/>
+    <logger name="org.apache.ibatis.io" level="DEBUG"/>
+    <logger name="org.apache.velocity" level="DEBUG"/>
+    <logger name="org.eclipse.jetty" level="DEBUG"/>
+    <logger name="io.undertow" level="DEBUG"/>
+    <logger name="org.xnio.nio" level="DEBUG"/>
+    <logger name="org.thymeleaf" level="DEBUG"/>
+    <logger name="springfox.documentation" level="DEBUG"/>
+    <logger name="org.hibernate.validator" level="DEBUG"/>
+    <logger name="com.netflix.loadbalancer" level="DEBUG"/>
+    <logger name="com.netflix.hystrix" level="DEBUG"/>
+    <logger name="com.netflix.zuul" level="DEBUG"/>
+    <logger name="de.codecentric" level="DEBUG"/>
+    <!-- cache DEBUG -->
+    <logger name="net.sf.ehcache" level="DEBUG"/>
+    <logger name="org.springframework.cache" level="DEBUG"/>
+    <!-- cloud -->
+    <logger name="org.apache.http" level="DEBUG"/>
+    <logger name="com.netflix.discovery" level="DEBUG"/>
+    <logger name="com.netflix.eureka" level="DEBUG"/>
+    <!-- 业务日志 -->
+    <Logger name="org.springblade" level="DEBUG"/>
+    <Logger name="org.springblade.core.tenant" level="DEBUG"/>
+    <Logger name="org.springblade.core.version" level="DEBUG"/>
+
+    <!-- 减少nacos日志 -->
+    <logger name="com.alibaba.nacos" level="DEBUG"/>
+</configuration>
+    <?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds">
+<!-- 自定义参数监听 -->
+<contextListener class="org.springblade.core.log.listener.LoggerStartupListener"/>
+<springProperty scope="context" name="springAppName" source="spring.application.name"/>
+
+<!-- 彩色日志依赖的渲染类 -->
+<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}}"/>
+
+<!-- 定义日志存储目录 -->
+<property name="LOG_DIR" value="logs" />
+
+<!-- 控制台输出 -->
+<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+        <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+        <charset>utf8</charset>
+    </encoder>
+</appender>
+
+<!-- 按日期滚动的文件Appender -->
+<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+    <!-- 当前正在写入的日志文件路径 -->
+    <file>${LOG_DIR}/${springAppName:-application}.log</file>
+    <!-- 基于时间的滚动策略 -->
+    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+        <!-- 归档日志文件的命名模式,按天分割 -->
+        <fileNamePattern>${LOG_DIR}/${springAppName:-application}.%d{yyyy-MM-dd}.log</fileNamePattern>
+        <!-- 保留日志的天数,超过此天数的旧日志文件会被自动删除 -->
+        <maxHistory>30</maxHistory>
+        <!-- 可选:总日志文件大小限制,防止日志占满磁盘 -->
+        <totalSizeCap>3GB</totalSizeCap>
+    </rollingPolicy>
+    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+        <!-- 使用详细的日志格式 -->
+        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{40} - %msg%n</pattern>
+        <charset>utf8</charset>
+    </encoder>
+</appender>
+
+<if condition='property("ELK_MODE").toUpperCase().contains("TRUE")'>
+    <then>
+        <!-- 推送日志至elk -->
+        <appender name="STDOUT_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+            <destination>${DESTINATION}</destination>
+            <!-- 日志输出编码 -->
+            <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+                <providers>
+                    <timestamp>
+                        <timeZone>UTC</timeZone>
+                    </timestamp>
+                    <pattern>
+                        <pattern>
+                            {
+                            "traceId": "%X{traceId}",
+                            "requestId": "%X{requestId}",
+                            "accountId": "%X{accountId}",
+                            "tenantId": "%X{tenantId}",
+                            "logLevel": "%level",
+                            "serviceName": "${springAppName:-SpringApp}",
+                            "pid": "${PID:-}",
+                            "thread": "%thread",
+                            "class": "%logger{40}",
+                            "line":"%L",
+                            "message": "%message"
+                            }
+                        </pattern>
+                    </pattern>
+                    <mdc/>
+                    <stackTrace/>
+                </providers>
+            </encoder>
+        </appender>
+    </then>
+</if>
+
+<!-- 日志输出级别 -->
+<root level="DEBUG">
+    <appender-ref ref="STDOUT"/>
+    <appender-ref ref="FILE"/> <!-- 新增的文件输出 -->
+    <appender-ref ref="${STDOUT_APPENDER}"/>
+</root>
+
+<!-- 以下为各种logger的级别配置,保持不变 -->
+<logger name="net.sf.ehcache" level="DEBUG"/>
+<logger name="druid.sql" level="DEBUG"/>
+
+<!-- MyBatis log configure -->
+<logger name="com.apache.ibatis" level="DEBUG"/>
+<logger name="org.mybatis.spring" level="DEBUG"/>
+<logger name="java.sql.Connection" level="DEBUG"/>
+<logger name="java.sql.Statement" level="DEBUG"/>
+<logger name="java.sql.PreparedStatement" level="DEBUG"/>
+
+<!-- 减少部分debug日志 -->
+<logger name="druid.sql" level="DEBUG"/>
+<logger name="org.apache.shiro" level="DEBUG"/>
+<logger name="org.mybatis.spring" level="DEBUG"/>
+<logger name="org.springframework" level="DEBUG"/>
+<logger name="org.springframework.context" level="DEBUG"/>
+<logger name="org.springframework.beans" level="DEBUG"/>
+<logger name="com.baomidou.mybatisplus" level="DEBUG"/>
+<logger name="org.apache.ibatis.io" level="DEBUG"/>
+<logger name="org.apache.velocity" level="DEBUG"/>
+<logger name="org.eclipse.jetty" level="DEBUG"/>
+<logger name="io.undertow" level="DEBUG"/>
+<logger name="org.xnio.nio" level="DEBUG"/>
+<logger name="org.thymeleaf" level="DEBUG"/>
+<logger name="springfox.documentation" level="DEBUG"/>
+<logger name="org.hibernate.validator" level="DEBUG"/>
+<logger name="com.netflix.loadbalancer" level="DEBUG"/>
+<logger name="com.netflix.hystrix" level="DEBUG"/>
+<logger name="com.netflix.zuul" level="DEBUG"/>
+<logger name="de.codecentric" level="DEBUG"/>
+<!-- cache DEBUG -->
+<logger name="net.sf.ehcache" level="DEBUG"/>
+<logger name="org.springframework.cache" level="DEBUG"/>
+<!-- cloud -->
+<logger name="org.apache.http" level="DEBUG"/>
+<logger name="com.netflix.discovery" level="DEBUG"/>
+<logger name="com.netflix.eureka" level="DEBUG"/>
+<!-- 业务日志 -->
+<Logger name="org.springblade" level="DEBUG"/>
+<Logger name="org.springblade.core.tenant" level="DEBUG"/>
+<Logger name="org.springblade.core.version" level="DEBUG"/>
+
+<!-- 减少nacos日志 -->
+<logger name="com.alibaba.nacos" level="DEBUG"/>
+</configuration>

+ 136 - 0
blade-service/gubersail-shop-app/src/main/resources/log/logback-prod.xml

@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds">
+    <!-- 自定义参数监听 -->
+    <contextListener class="org.springblade.core.log.listener.LoggerStartupListener"/>
+    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
+
+    <!-- 彩色日志依赖的渲染类 -->
+    <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}}"/>
+
+    <!-- 定义日志存储目录 -->
+    <property name="LOG_DIR" value="logs" />
+
+    <!-- 控制台输出 -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+            <charset>utf8</charset>
+        </encoder>
+    </appender>
+
+    <!-- 按日期滚动的文件Appender -->
+    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 当前正在写入的日志文件路径 -->
+        <file>${LOG_DIR}/${springAppName:-application}.log</file>
+        <!-- 基于时间的滚动策略 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 归档日志文件的命名模式,按天分割 -->
+            <fileNamePattern>${LOG_DIR}/${springAppName:-application}.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 保留日志的天数,超过此天数的旧日志文件会被自动删除 -->
+            <maxHistory>30</maxHistory>
+            <!-- 可选:总日志文件大小限制,防止日志占满磁盘 -->
+            <totalSizeCap>3GB</totalSizeCap>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!-- 使用详细的日志格式 -->
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{40} - %msg%n</pattern>
+            <charset>utf8</charset>
+        </encoder>
+    </appender>
+
+    <if condition='property("ELK_MODE").toUpperCase().contains("TRUE")'>
+        <then>
+            <!-- 推送日志至elk -->
+            <appender name="STDOUT_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+                <destination>${DESTINATION}</destination>
+                <!-- 日志输出编码 -->
+                <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+                    <providers>
+                        <timestamp>
+                            <timeZone>UTC</timeZone>
+                        </timestamp>
+                        <pattern>
+                            <pattern>
+                                {
+                                "traceId": "%X{traceId}",
+                                "requestId": "%X{requestId}",
+                                "accountId": "%X{accountId}",
+                                "tenantId": "%X{tenantId}",
+                                "logLevel": "%level",
+                                "serviceName": "${springAppName:-SpringApp}",
+                                "pid": "${PID:-}",
+                                "thread": "%thread",
+                                "class": "%logger{40}",
+                                "line":"%L",
+                                "message": "%message"
+                                }
+                            </pattern>
+                        </pattern>
+                        <mdc/>
+                        <stackTrace/>
+                    </providers>
+                </encoder>
+            </appender>
+        </then>
+    </if>
+
+    <!-- 日志输出级别 -->
+    <root level="DEBUG">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="FILE"/> <!-- 新增的文件输出 -->
+        <appender-ref ref="${STDOUT_APPENDER}"/>
+    </root>
+
+    <!-- 以下为各种logger的级别配置,保持不变 -->
+    <logger name="net.sf.ehcache" level="DEBUG"/>
+    <logger name="druid.sql" level="DEBUG"/>
+
+    <!-- MyBatis log configure -->
+    <logger name="com.apache.ibatis" level="DEBUG"/>
+    <logger name="org.mybatis.spring" level="DEBUG"/>
+    <logger name="java.sql.Connection" level="DEBUG"/>
+    <logger name="java.sql.Statement" level="DEBUG"/>
+    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
+
+    <!-- 减少部分debug日志 -->
+    <logger name="druid.sql" level="DEBUG"/>
+    <logger name="org.apache.shiro" level="DEBUG"/>
+    <logger name="org.mybatis.spring" level="DEBUG"/>
+    <logger name="org.springframework" level="DEBUG"/>
+    <logger name="org.springframework.context" level="DEBUG"/>
+    <logger name="org.springframework.beans" level="DEBUG"/>
+    <logger name="com.baomidou.mybatisplus" level="DEBUG"/>
+    <logger name="org.apache.ibatis.io" level="DEBUG"/>
+    <logger name="org.apache.velocity" level="DEBUG"/>
+    <logger name="org.eclipse.jetty" level="DEBUG"/>
+    <logger name="io.undertow" level="DEBUG"/>
+    <logger name="org.xnio.nio" level="DEBUG"/>
+    <logger name="org.thymeleaf" level="DEBUG"/>
+    <logger name="springfox.documentation" level="DEBUG"/>
+    <logger name="org.hibernate.validator" level="DEBUG"/>
+    <logger name="com.netflix.loadbalancer" level="DEBUG"/>
+    <logger name="com.netflix.hystrix" level="DEBUG"/>
+    <logger name="com.netflix.zuul" level="DEBUG"/>
+    <logger name="de.codecentric" level="DEBUG"/>
+    <!-- cache DEBUG -->
+    <logger name="net.sf.ehcache" level="DEBUG"/>
+    <logger name="org.springframework.cache" level="DEBUG"/>
+    <!-- cloud -->
+    <logger name="org.apache.http" level="DEBUG"/>
+    <logger name="com.netflix.discovery" level="DEBUG"/>
+    <logger name="com.netflix.eureka" level="DEBUG"/>
+    <!-- 业务日志 -->
+    <Logger name="org.springblade" level="DEBUG"/>
+    <Logger name="org.springblade.core.tenant" level="DEBUG"/>
+    <Logger name="org.springblade.core.version" level="DEBUG"/>
+
+    <!-- 减少nacos日志 -->
+    <logger name="com.alibaba.nacos" level="DEBUG"/>
+</configuration>

+ 136 - 0
blade-service/gubersail-shop-app/src/main/resources/log/logback-test.xml

@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds">
+    <!-- 自定义参数监听 -->
+    <contextListener class="org.springblade.core.log.listener.LoggerStartupListener"/>
+    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
+
+    <!-- 彩色日志依赖的渲染类 -->
+    <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}}"/>
+
+    <!-- 定义日志存储目录 -->
+    <property name="LOG_DIR" value="logs" />
+
+    <!-- 控制台输出 -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+            <charset>utf8</charset>
+        </encoder>
+    </appender>
+
+    <!-- 按日期滚动的文件Appender -->
+    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 当前正在写入的日志文件路径 -->
+        <file>${LOG_DIR}/${springAppName:-application}.log</file>
+        <!-- 基于时间的滚动策略 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 归档日志文件的命名模式,按天分割 -->
+            <fileNamePattern>${LOG_DIR}/${springAppName:-application}.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 保留日志的天数,超过此天数的旧日志文件会被自动删除 -->
+            <maxHistory>30</maxHistory>
+            <!-- 可选:总日志文件大小限制,防止日志占满磁盘 -->
+            <totalSizeCap>3GB</totalSizeCap>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!-- 使用详细的日志格式 -->
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{40} - %msg%n</pattern>
+            <charset>utf8</charset>
+        </encoder>
+    </appender>
+
+    <if condition='property("ELK_MODE").toUpperCase().contains("TRUE")'>
+        <then>
+            <!-- 推送日志至elk -->
+            <appender name="STDOUT_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+                <destination>${DESTINATION}</destination>
+                <!-- 日志输出编码 -->
+                <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+                    <providers>
+                        <timestamp>
+                            <timeZone>UTC</timeZone>
+                        </timestamp>
+                        <pattern>
+                            <pattern>
+                                {
+                                "traceId": "%X{traceId}",
+                                "requestId": "%X{requestId}",
+                                "accountId": "%X{accountId}",
+                                "tenantId": "%X{tenantId}",
+                                "logLevel": "%level",
+                                "serviceName": "${springAppName:-SpringApp}",
+                                "pid": "${PID:-}",
+                                "thread": "%thread",
+                                "class": "%logger{40}",
+                                "line":"%L",
+                                "message": "%message"
+                                }
+                            </pattern>
+                        </pattern>
+                        <mdc/>
+                        <stackTrace/>
+                    </providers>
+                </encoder>
+            </appender>
+        </then>
+    </if>
+
+    <!-- 日志输出级别 -->
+    <root level="DEBUG">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="FILE"/> <!-- 新增的文件输出 -->
+        <appender-ref ref="${STDOUT_APPENDER}"/>
+    </root>
+
+    <!-- 以下为各种logger的级别配置,保持不变 -->
+    <logger name="net.sf.ehcache" level="DEBUG"/>
+    <logger name="druid.sql" level="DEBUG"/>
+
+    <!-- MyBatis log configure -->
+    <logger name="com.apache.ibatis" level="DEBUG"/>
+    <logger name="org.mybatis.spring" level="DEBUG"/>
+    <logger name="java.sql.Connection" level="DEBUG"/>
+    <logger name="java.sql.Statement" level="DEBUG"/>
+    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
+
+    <!-- 减少部分debug日志 -->
+    <logger name="druid.sql" level="DEBUG"/>
+    <logger name="org.apache.shiro" level="DEBUG"/>
+    <logger name="org.mybatis.spring" level="DEBUG"/>
+    <logger name="org.springframework" level="DEBUG"/>
+    <logger name="org.springframework.context" level="DEBUG"/>
+    <logger name="org.springframework.beans" level="DEBUG"/>
+    <logger name="com.baomidou.mybatisplus" level="DEBUG"/>
+    <logger name="org.apache.ibatis.io" level="DEBUG"/>
+    <logger name="org.apache.velocity" level="DEBUG"/>
+    <logger name="org.eclipse.jetty" level="DEBUG"/>
+    <logger name="io.undertow" level="DEBUG"/>
+    <logger name="org.xnio.nio" level="DEBUG"/>
+    <logger name="org.thymeleaf" level="DEBUG"/>
+    <logger name="springfox.documentation" level="DEBUG"/>
+    <logger name="org.hibernate.validator" level="DEBUG"/>
+    <logger name="com.netflix.loadbalancer" level="DEBUG"/>
+    <logger name="com.netflix.hystrix" level="DEBUG"/>
+    <logger name="com.netflix.zuul" level="DEBUG"/>
+    <logger name="de.codecentric" level="DEBUG"/>
+    <!-- cache DEBUG -->
+    <logger name="net.sf.ehcache" level="DEBUG"/>
+    <logger name="org.springframework.cache" level="DEBUG"/>
+    <!-- cloud -->
+    <logger name="org.apache.http" level="DEBUG"/>
+    <logger name="com.netflix.discovery" level="DEBUG"/>
+    <logger name="com.netflix.eureka" level="DEBUG"/>
+    <!-- 业务日志 -->
+    <Logger name="org.springblade" level="DEBUG"/>
+    <Logger name="org.springblade.core.tenant" level="DEBUG"/>
+    <Logger name="org.springblade.core.version" level="DEBUG"/>
+
+    <!-- 减少nacos日志 -->
+    <logger name="com.alibaba.nacos" level="DEBUG"/>
+</configuration>

+ 1 - 0
blade-service/pom.xml

@@ -26,6 +26,7 @@
         <module>gubersail-dealer-app</module>
         <module>gubersail-dealer-admin</module>
         <module>blade-factory</module>
+        <module>gubersail-shop-app</module>
     </modules>
 
     <dependencies>