Răsfoiți Sursa

维护日志打印 更新菜品种类与列表融合接口的参数反馈

lutong 2 luni în urmă
părinte
comite
bdb6839aba

+ 38 - 20
alien-api/src/main/resources/logback-spring.xml

@@ -4,10 +4,11 @@
 
     <!-- 定义全局参数常量 -->
     <property name="log.level" value="debug"/>
-    <property name="log.maxHistory" value="30"/><!-- 30表示30天 -->
+    <property name="log.maxHistory" value="30"/><!-- 30表示保留30个归档 -->
     <springProperty scope="context" name="logging.path" source="logging.path" defaultValue="C:/project/ext/log"/>
-    <!--输出文件前缀-->
-    <property name="FILENAME" value="alien"/>
+    <!--输出文件前缀;各服务日志写入各自子目录 logging.path/FILENAME/ -->
+    <property name="FILENAME" value="alien-api"/>
+    <property name="LOG_DIR" value="${logging.path}/${FILENAME}"/>
 
     <!-- 文件输出格式 -->
     <property name="FILE_LOG_PATTERN" value="[%d{MM/dd HH:mm:ss.SSS}][%-10.10thread][%-5level][%-40.40c{1}:%5line]:[%15method] || %m%n"/>
@@ -28,15 +29,19 @@
     </appender>
 
     <!--2. 输出到文档-->
-    <!-- DEBUG 日志 -->
+    <!-- DEBUG 日志:按 1MB 大小滚动,满 1MB 自动切到下一个文件 -->
     <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/DEBUG.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_DEBUG.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/DEBUG.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_DEBUG.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>DEBUG</level>
@@ -45,15 +50,19 @@
         </filter>
     </appender>
 
-    <!-- INFO 日志 -->
+    <!-- INFO 日志:按 1MB 大小滚动 -->
     <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/INFO.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_INFO.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/INFO.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_INFO.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>INFO</level>
@@ -62,15 +71,19 @@
         </filter>
     </appender>
 
-    <!-- WARN 日志 -->
+    <!-- WARN 日志:按 1MB 大小滚动 -->
     <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/WARN.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_WARN.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/WARN.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_WARN.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>WARN</level>
@@ -79,14 +92,19 @@
         </filter>
     </appender>
 
+    <!-- ERROR 日志:按 1MB 大小滚动 -->
     <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/ERROR.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_ERROR.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/ERROR.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_ERROR.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>ERROR</level>
@@ -97,8 +115,8 @@
 
     <!-- 降噪配置 -->
     <logger name="springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator" level="WARN"/>
-    <logger name="org.springframework.security.web.DefaultSecurityFilterChain " level="WARN"/>
-    <logger name="com.netflix.config.sources.URLConfigurationSource " level="WARN"/>
+    <logger name="org.springframework.security.web.DefaultSecurityFilterChain" level="WARN"/>
+    <logger name="com.netflix.config.sources.URLConfigurationSource" level="WARN"/>
     <logger name="com.netflix.discovery" level="WARN"/>
     <logger name="org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]" level="WARN"/>
 

+ 1 - 1
alien-dining/src/main/java/shop/alien/dining/controller/StoreInfoController.java

@@ -64,7 +64,7 @@ public class StoreInfoController {
         }
     }
 
-    @ApiOperation(value = "根据门店ID查询菜品种类及各类别下菜品", notes = "一次返回所有菜品种类及每个分类下的菜品列表;可选 keyword 按菜品名称模糊查询")
+    @ApiOperation(value = "根据门店ID查询菜品种类及各类别下菜品", notes = "一次返回所有菜品种类及每个分类下的菜品列表;可选 keyword 按菜品名称模糊查询。返回中 category 与 /store/info/categories 单条结构一致,cuisines 与 /store/info/cuisines 返回结构一致,保证字段完整一致。")
     @GetMapping("/categories-with-cuisines")
     public R<List<CategoryWithCuisinesVO>> getCategoriesWithCuisinesByStoreId(
             @ApiParam(value = "门店ID", required = true) @RequestParam Integer storeId,

+ 4 - 1
alien-dining/src/main/java/shop/alien/dining/service/impl/StoreInfoServiceImpl.java

@@ -74,11 +74,12 @@ public class StoreInfoServiceImpl implements StoreInfoService {
             return new java.util.ArrayList<>();
         }
         
-        // 查询该门店下所有上架的菜品
+        // 查询该门店下所有上架的菜品(与 getCategoriesWithCuisinesByStoreId 中 cuisines 查询条件、排序一致)
         LambdaQueryWrapper<StoreCuisine> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(StoreCuisine::getStoreId, category.getStoreId());
         wrapper.eq(StoreCuisine::getDeleteFlag, 0);
         wrapper.eq(StoreCuisine::getShelfStatus, 1); // 只查询上架的菜品
+        wrapper.orderByAsc(StoreCuisine::getId); // 与 categories-with-cuisines 中 cuisines 顺序一致
         
         List<StoreCuisine> allCuisines = storeCuisineMapper.selectList(wrapper);
         
@@ -111,10 +112,12 @@ public class StoreInfoServiceImpl implements StoreInfoService {
         if (categories == null || categories.isEmpty()) {
             return new ArrayList<>();
         }
+        // 与 getCuisinesByCategoryId 相同的查询条件与排序,保证 cuisines 字段与 /store/info/cuisines 一致
         LambdaQueryWrapper<StoreCuisine> cuisineWrapper = new LambdaQueryWrapper<>();
         cuisineWrapper.eq(StoreCuisine::getStoreId, storeId);
         cuisineWrapper.eq(StoreCuisine::getDeleteFlag, 0);
         cuisineWrapper.eq(StoreCuisine::getShelfStatus, 1);
+        cuisineWrapper.orderByAsc(StoreCuisine::getId);
         List<StoreCuisine> allCuisines = storeCuisineMapper.selectList(cuisineWrapper);
         if (allCuisines == null) {
             allCuisines = new ArrayList<>();

+ 29 - 16
alien-dining/src/main/resources/logback-spring.xml

@@ -5,16 +5,18 @@
 <!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
 <!-- 该信息是由于设置了当配置文件变化时重新加载,所以每当达到扫描时间的时候就会检查配置文件是否错误。但是由于一般配置文件都放在了JAR包中,
     而扫描的时候无法扫描JAR包内,因此会提示没有可以检查的文件,所以每隔一段时间就输出一次-->
-<configuration scan="false" scanPeriod="60 seconds" debug="true">
+<configuration scan="false" scanPeriod="60 seconds" debug="false">
 <!--    <contextName>logback-spring</contextName>-->
 
     <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使"${}"来使用变量。 -->
     <!-- 定义全局参数常量 -->
     <property name="log.level" value="debug"/>
-    <property name="log.maxHistory" value="30"/><!-- 30表示30个 -->
+    <property name="log.maxHistory" value="30"/><!-- 30表示保留30个归档 -->
+    <!-- Linux/生产部署时请设置 logging.path;Logback 只自动创建子目录 LOG_DIR,根目录需存在 -->
     <springProperty scope="context" name="logging.path" source="logging.path"  defaultValue="C:/project/ext/log"/>
-    <!--输出文件前缀-->
+    <!--输出文件前缀;各服务日志写入各自子目录 logging.path/FILENAME/ -->
     <property name="FILENAME" value="alien-dining"/>
+    <property name="LOG_DIR" value="${logging.path}/${FILENAME}"/>
 
     <!--0. 日志格式和颜色渲染 -->
     <!-- 彩色日志依赖的渲染类 -->
@@ -26,11 +28,10 @@
     <property name="FILE_LOG_PATTERN" value="[%d{MM/dd HH:mm:ss.SSS}][%-10.10thread][%-5level][%-40.40c{1}:%5line]:[%15method] || %m%n"/>
     <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. 输出到控制台-->
+    <!--1. 输出到控制台(与其它模块一致:仅 INFO 及以上,避免生产/采集时 DEBUG 刷屏)-->
     <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
-        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-            <level>${log.level}</level>
+            <level>INFO</level>
         </filter>
         <encoder>
             <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
@@ -42,14 +43,17 @@
     <!--2. 输出到文档-->
     <!-- DEBUG 日志:按 1MB 大小滚动,满 1MB 自动切到下一个文件 -->
     <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/DEBUG.log</file>
+        <file>${LOG_DIR}/DEBUG.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_DEBUG.%i.log.gz</fileNamePattern>
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_DEBUG.%i.log.gz</fileNamePattern>
             <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>DEBUG</level>
@@ -60,14 +64,17 @@
 
     <!-- INFO 日志:按 1MB 大小滚动 -->
     <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/INFO.log</file>
+        <file>${LOG_DIR}/INFO.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_INFO.%i.log.gz</fileNamePattern>
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_INFO.%i.log.gz</fileNamePattern>
             <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>INFO</level>
@@ -78,14 +85,17 @@
 
     <!-- WARN 日志:按 1MB 大小滚动 -->
     <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/WARN.log</file>
+        <file>${LOG_DIR}/WARN.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_WARN.%i.log.gz</fileNamePattern>
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_WARN.%i.log.gz</fileNamePattern>
             <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>WARN</level>
@@ -96,14 +106,17 @@
 
     <!-- ERROR 日志:按 1MB 大小滚动 -->
     <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/ERROR.log</file>
+        <file>${LOG_DIR}/ERROR.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_ERROR.%i.log.gz</fileNamePattern>
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_ERROR.%i.log.gz</fileNamePattern>
             <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>ERROR</level>
@@ -142,8 +155,8 @@
     -->
 
     <logger name="springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator" level="WARN"/>
-    <logger name="org.springframework.security.web.DefaultSecurityFilterChain " level="WARN"/>
-    <logger name="com.netflix.config.sources.URLConfigurationSource " level="WARN"/>
+    <logger name="org.springframework.security.web.DefaultSecurityFilterChain" level="WARN"/>
+    <logger name="com.netflix.config.sources.URLConfigurationSource" level="WARN"/>
 
     <!-- 4. 最终的策略 -->
     <!-- 4.1 开发环境:打印控制台-->

+ 8 - 3
alien-entity/src/main/java/shop/alien/entity/store/vo/CategoryWithCuisinesVO.java

@@ -12,18 +12,23 @@ import java.util.List;
 
 /**
  * 菜品种类及其下属菜品 VO(通过门店ID查询时返回)
+ * <p>
+ * 与单独接口的返回结构一致:
+ * - category 与 GET /store/info/categories 中每个元素的字段完全一致(StoreCuisineCategory)
+ * - cuisines 与 GET /store/info/cuisines 返回的列表元素字段完全一致(StoreCuisine)
+ * </p>
  *
  * @author system
  */
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-@ApiModel(value = "CategoryWithCuisinesVO", description = "菜品种类及该分类下的菜品列表")
+@ApiModel(value = "CategoryWithCuisinesVO", description = "菜品种类及该分类下的菜品列表;category 与 /store/info/categories 单条一致,cuisines 与 /store/info/cuisines 返回列表元素一致")
 public class CategoryWithCuisinesVO {
 
-    @ApiModelProperty(value = "菜品种类信息")
+    @ApiModelProperty(value = "菜品种类信息,字段与 GET /store/info/categories 返回的每条一致(StoreCuisineCategory)")
     private StoreCuisineCategory category;
 
-    @ApiModelProperty(value = "该分类下的菜品列表")
+    @ApiModelProperty(value = "该分类下的菜品列表,每项字段与 GET /store/info/cuisines 返回的每条一致(StoreCuisine)")
     private List<StoreCuisine> cuisines;
 }

+ 39 - 20
alien-gateway/src/main/resources/logback-spring.xml

@@ -4,10 +4,12 @@
 
     <!-- 定义全局参数常量 -->
     <property name="log.level" value="debug"/>
-    <property name="log.maxHistory" value="30"/><!-- 30表示30天 -->
+    <property name="log.maxHistory" value="30"/><!-- 30表示保留30个归档 -->
+    <!-- Linux/生产部署时请在 application.yml 或环境变量中设置 logging.path,否则默认 C:/project/ext/log 可能不存在 -->
     <springProperty scope="context" name="logging.path" source="logging.path" defaultValue="C:/project/ext/log"/>
-    <!--输出文件前缀-->
-    <property name="FILENAME" value="alien"/>
+    <!--输出文件前缀;各服务日志写入各自子目录 logging.path/FILENAME/ -->
+    <property name="FILENAME" value="alien-gateway"/>
+    <property name="LOG_DIR" value="${logging.path}/${FILENAME}"/>
 
     <!-- 文件输出格式 -->
     <property name="FILE_LOG_PATTERN" value="[%d{MM/dd HH:mm:ss.SSS}][%-10.10thread][%-5level][%-40.40c{1}:%5line]:[%15method] || %m%n"/>
@@ -28,15 +30,19 @@
     </appender>
 
     <!--2. 输出到文档-->
-    <!-- DEBUG 日志 -->
+    <!-- DEBUG 日志:按 1MB 大小滚动,满 1MB 自动切到下一个文件 -->
     <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/DEBUG.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_DEBUG.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/DEBUG.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_DEBUG.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>DEBUG</level>
@@ -45,15 +51,19 @@
         </filter>
     </appender>
 
-    <!-- INFO 日志 -->
+    <!-- INFO 日志:按 1MB 大小滚动 -->
     <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/INFO.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_INFO.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/INFO.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_INFO.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>INFO</level>
@@ -62,15 +72,19 @@
         </filter>
     </appender>
 
-    <!-- WARN 日志 -->
+    <!-- WARN 日志:按 1MB 大小滚动 -->
     <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/WARN.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_WARN.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/WARN.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_WARN.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>WARN</level>
@@ -79,14 +93,19 @@
         </filter>
     </appender>
 
+    <!-- ERROR 日志:按 1MB 大小滚动 -->
     <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/ERROR.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_ERROR.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/ERROR.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_ERROR.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>ERROR</level>
@@ -97,8 +116,8 @@
 
     <!-- 降噪配置 -->
     <logger name="springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator" level="WARN"/>
-    <logger name="org.springframework.security.web.DefaultSecurityFilterChain " level="WARN"/>
-    <logger name="com.netflix.config.sources.URLConfigurationSource " level="WARN"/>
+    <logger name="org.springframework.security.web.DefaultSecurityFilterChain" level="WARN"/>
+    <logger name="com.netflix.config.sources.URLConfigurationSource" level="WARN"/>
     <logger name="com.netflix.discovery" level="WARN"/>
     <logger name="org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]" level="WARN"/>
 

+ 38 - 20
alien-job/src/main/resources/logback-spring.xml

@@ -4,10 +4,11 @@
 
     <!-- 定义全局参数常量 -->
     <property name="log.level" value="debug"/>
-    <property name="log.maxHistory" value="30"/><!-- 30表示30天 -->
+    <property name="log.maxHistory" value="30"/><!-- 30表示保留30个归档 -->
     <springProperty scope="context" name="logging.path" source="logging.path" defaultValue="C:/project/ext/log"/>
-    <!--输出文件前缀-->
-    <property name="FILENAME" value="alien"/>
+    <!--输出文件前缀;各服务日志写入各自子目录 logging.path/FILENAME/ -->
+    <property name="FILENAME" value="alien-job"/>
+    <property name="LOG_DIR" value="${logging.path}/${FILENAME}"/>
 
     <!-- 文件输出格式 -->
     <property name="FILE_LOG_PATTERN" value="[%d{MM/dd HH:mm:ss.SSS}][%-10.10thread][%-5level][%-40.40c{1}:%5line]:[%15method] || %m%n"/>
@@ -28,15 +29,19 @@
     </appender>
 
     <!--2. 输出到文档-->
-    <!-- DEBUG 日志 -->
+    <!-- DEBUG 日志:按 1MB 大小滚动,满 1MB 自动切到下一个文件 -->
     <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/DEBUG.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_DEBUG.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/DEBUG.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_DEBUG.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>DEBUG</level>
@@ -45,15 +50,19 @@
         </filter>
     </appender>
 
-    <!-- INFO 日志 -->
+    <!-- INFO 日志:按 1MB 大小滚动 -->
     <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/INFO.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_INFO.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/INFO.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_INFO.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>INFO</level>
@@ -62,15 +71,19 @@
         </filter>
     </appender>
 
-    <!-- WARN 日志 -->
+    <!-- WARN 日志:按 1MB 大小滚动 -->
     <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/WARN.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_WARN.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/WARN.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_WARN.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>WARN</level>
@@ -79,14 +92,19 @@
         </filter>
     </appender>
 
+    <!-- ERROR 日志:按 1MB 大小滚动 -->
     <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/ERROR.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_ERROR.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/ERROR.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_ERROR.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>ERROR</level>
@@ -97,8 +115,8 @@
 
     <!-- 降噪配置 -->
     <logger name="springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator" level="WARN"/>
-    <logger name="org.springframework.security.web.DefaultSecurityFilterChain " level="WARN"/>
-    <logger name="com.netflix.config.sources.URLConfigurationSource " level="WARN"/>
+    <logger name="org.springframework.security.web.DefaultSecurityFilterChain" level="WARN"/>
+    <logger name="com.netflix.config.sources.URLConfigurationSource" level="WARN"/>
     <logger name="com.netflix.discovery" level="WARN"/>
     <logger name="org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]" level="WARN"/>
 

+ 1 - 1
alien-lawyer/src/main/resources/bootstrap.yml

@@ -1,3 +1,3 @@
 spring:
   profiles:
-    active: uat
+    active: dev

+ 38 - 20
alien-lawyer/src/main/resources/logback-spring.xml

@@ -4,10 +4,11 @@
 
     <!-- 定义全局参数常量 -->
     <property name="log.level" value="debug"/>
-    <property name="log.maxHistory" value="30"/><!-- 30表示30天 -->
+    <property name="log.maxHistory" value="30"/><!-- 30表示保留30个归档 -->
     <springProperty scope="context" name="logging.path" source="logging.path" defaultValue="C:/project/ext/log"/>
-    <!--输出文件前缀-->
-    <property name="FILENAME" value="alien"/>
+    <!--输出文件前缀;各服务日志写入各自子目录 logging.path/FILENAME/ -->
+    <property name="FILENAME" value="alien-lawyer"/>
+    <property name="LOG_DIR" value="${logging.path}/${FILENAME}"/>
 
     <!-- 文件输出格式 -->
     <property name="FILE_LOG_PATTERN" value="[%d{MM/dd HH:mm:ss.SSS}][%-10.10thread][%-5level][%-40.40c{1}:%5line]:[%15method] || %m%n"/>
@@ -28,15 +29,19 @@
     </appender>
 
     <!--2. 输出到文档-->
-    <!-- DEBUG 日志 -->
+    <!-- DEBUG 日志:按 1MB 大小滚动,满 1MB 自动切到下一个文件 -->
     <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/DEBUG.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_DEBUG.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/DEBUG.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_DEBUG.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>DEBUG</level>
@@ -45,15 +50,19 @@
         </filter>
     </appender>
 
-    <!-- INFO 日志 -->
+    <!-- INFO 日志:按 1MB 大小滚动 -->
     <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/INFO.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_INFO.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/INFO.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_INFO.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>INFO</level>
@@ -62,15 +71,19 @@
         </filter>
     </appender>
 
-    <!-- WARN 日志 -->
+    <!-- WARN 日志:按 1MB 大小滚动 -->
     <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/WARN.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_WARN.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/WARN.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_WARN.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>WARN</level>
@@ -79,14 +92,19 @@
         </filter>
     </appender>
 
+    <!-- ERROR 日志:按 1MB 大小滚动 -->
     <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/ERROR.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_ERROR.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/ERROR.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_ERROR.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>ERROR</level>
@@ -97,8 +115,8 @@
 
     <!-- 降噪配置 -->
     <logger name="springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator" level="WARN"/>
-    <logger name="org.springframework.security.web.DefaultSecurityFilterChain " level="WARN"/>
-    <logger name="com.netflix.config.sources.URLConfigurationSource " level="WARN"/>
+    <logger name="org.springframework.security.web.DefaultSecurityFilterChain" level="WARN"/>
+    <logger name="com.netflix.config.sources.URLConfigurationSource" level="WARN"/>
     <logger name="com.netflix.discovery" level="WARN"/>
     <logger name="org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]" level="WARN"/>
 

+ 38 - 20
alien-second/src/main/resources/logback-spring.xml

@@ -4,10 +4,11 @@
 
     <!-- 定义全局参数常量 -->
     <property name="log.level" value="debug"/>
-    <property name="log.maxHistory" value="30"/><!-- 30表示30天 -->
+    <property name="log.maxHistory" value="30"/><!-- 30表示保留30个归档 -->
     <springProperty scope="context" name="logging.path" source="logging.path" defaultValue="C:/project/ext/log"/>
-    <!--输出文件前缀-->
-    <property name="FILENAME" value="alien"/>
+    <!--输出文件前缀;各服务日志写入各自子目录 logging.path/FILENAME/ -->
+    <property name="FILENAME" value="alien-second"/>
+    <property name="LOG_DIR" value="${logging.path}/${FILENAME}"/>
 
     <!-- 文件输出格式 -->
     <property name="FILE_LOG_PATTERN" value="[%d{MM/dd HH:mm:ss.SSS}][%-10.10thread][%-5level][%-40.40c{1}:%5line]:[%15method] || %m%n"/>
@@ -28,15 +29,19 @@
     </appender>
 
     <!--2. 输出到文档-->
-    <!-- DEBUG 日志 -->
+    <!-- DEBUG 日志:按 1MB 大小滚动,满 1MB 自动切到下一个文件 -->
     <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/DEBUG.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_DEBUG.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/DEBUG.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_DEBUG.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>DEBUG</level>
@@ -45,15 +50,19 @@
         </filter>
     </appender>
 
-    <!-- INFO 日志 -->
+    <!-- INFO 日志:按 1MB 大小滚动 -->
     <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/INFO.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_INFO.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/INFO.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_INFO.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>INFO</level>
@@ -62,15 +71,19 @@
         </filter>
     </appender>
 
-    <!-- WARN 日志 -->
+    <!-- WARN 日志:按 1MB 大小滚动 -->
     <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/WARN.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_WARN.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/WARN.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_WARN.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>WARN</level>
@@ -79,14 +92,19 @@
         </filter>
     </appender>
 
+    <!-- ERROR 日志:按 1MB 大小滚动 -->
     <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/ERROR.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_ERROR.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/ERROR.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_ERROR.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>ERROR</level>
@@ -97,8 +115,8 @@
 
     <!-- 降噪配置 -->
     <logger name="springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator" level="WARN"/>
-    <logger name="org.springframework.security.web.DefaultSecurityFilterChain " level="WARN"/>
-    <logger name="com.netflix.config.sources.URLConfigurationSource " level="WARN"/>
+    <logger name="org.springframework.security.web.DefaultSecurityFilterChain" level="WARN"/>
+    <logger name="com.netflix.config.sources.URLConfigurationSource" level="WARN"/>
     <logger name="com.netflix.discovery" level="WARN"/>
     <logger name="org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]" level="WARN"/>
 

+ 38 - 20
alien-store-platform/src/main/resources/logback-spring.xml

@@ -4,10 +4,11 @@
 
     <!-- 定义全局参数常量 -->
     <property name="log.level" value="debug"/>
-    <property name="log.maxHistory" value="30"/><!-- 30表示30天 -->
+    <property name="log.maxHistory" value="30"/><!-- 30表示保留30个归档 -->
     <springProperty scope="context" name="logging.path" source="logging.path" defaultValue="C:/project/ext/log"/>
-    <!--输出文件前缀-->
-    <property name="FILENAME" value="alien"/>
+    <!--输出文件前缀;各服务日志写入各自子目录 logging.path/FILENAME/ -->
+    <property name="FILENAME" value="alien-store-platform"/>
+    <property name="LOG_DIR" value="${logging.path}/${FILENAME}"/>
 
     <!-- 文件输出格式 -->
     <property name="FILE_LOG_PATTERN" value="[%d{MM/dd HH:mm:ss.SSS}][%-10.10thread][%-5level][%-40.40c{1}:%5line]:[%15method] || %m%n"/>
@@ -28,15 +29,19 @@
     </appender>
 
     <!--2. 输出到文档-->
-    <!-- DEBUG 日志 -->
+    <!-- DEBUG 日志:按 1MB 大小滚动,满 1MB 自动切到下一个文件 -->
     <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/DEBUG.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_DEBUG.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/DEBUG.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_DEBUG.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>DEBUG</level>
@@ -45,15 +50,19 @@
         </filter>
     </appender>
 
-    <!-- INFO 日志 -->
+    <!-- INFO 日志:按 1MB 大小滚动 -->
     <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/INFO.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_INFO.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/INFO.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_INFO.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>INFO</level>
@@ -62,15 +71,19 @@
         </filter>
     </appender>
 
-    <!-- WARN 日志 -->
+    <!-- WARN 日志:按 1MB 大小滚动 -->
     <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/WARN.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_WARN.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/WARN.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_WARN.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>WARN</level>
@@ -79,14 +92,19 @@
         </filter>
     </appender>
 
+    <!-- ERROR 日志:按 1MB 大小滚动 -->
     <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/ERROR.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_ERROR.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/ERROR.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_ERROR.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>ERROR</level>
@@ -97,8 +115,8 @@
 
     <!-- 降噪配置 -->
     <logger name="springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator" level="WARN"/>
-    <logger name="org.springframework.security.web.DefaultSecurityFilterChain " level="WARN"/>
-    <logger name="com.netflix.config.sources.URLConfigurationSource " level="WARN"/>
+    <logger name="org.springframework.security.web.DefaultSecurityFilterChain" level="WARN"/>
+    <logger name="com.netflix.config.sources.URLConfigurationSource" level="WARN"/>
     <logger name="com.netflix.discovery" level="WARN"/>
     <logger name="org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]" level="WARN"/>
 

+ 38 - 20
alien-store/src/main/resources/logback-spring.xml

@@ -4,10 +4,11 @@
 
     <!-- 定义全局参数常量 -->
     <property name="log.level" value="debug"/>
-    <property name="log.maxHistory" value="30"/><!-- 30表示30天 -->
+    <property name="log.maxHistory" value="30"/><!-- 30表示保留30个归档 -->
     <springProperty scope="context" name="logging.path" source="logging.path" defaultValue="C:/project/ext/log"/>
-    <!--输出文件前缀-->
-    <property name="FILENAME" value="alien"/>
+    <!--输出文件前缀;各服务日志写入各自子目录 logging.path/FILENAME/ -->
+    <property name="FILENAME" value="alien-store"/>
+    <property name="LOG_DIR" value="${logging.path}/${FILENAME}"/>
 
     <!-- 文件输出格式 -->
     <property name="FILE_LOG_PATTERN" value="[%d{MM/dd HH:mm:ss.SSS}][%-10.10thread][%-5level][%-40.40c{1}:%5line]:[%15method] || %m%n"/>
@@ -28,15 +29,19 @@
     </appender>
 
     <!--2. 输出到文档-->
-    <!-- DEBUG 日志 -->
+    <!-- DEBUG 日志:按 1MB 大小滚动,满 1MB 自动切到下一个文件 -->
     <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/DEBUG.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_DEBUG.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/DEBUG.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_DEBUG.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>DEBUG</level>
@@ -45,15 +50,19 @@
         </filter>
     </appender>
 
-    <!-- INFO 日志 -->
+    <!-- INFO 日志:按 1MB 大小滚动 -->
     <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/INFO.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_INFO.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/INFO.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_INFO.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>INFO</level>
@@ -62,15 +71,19 @@
         </filter>
     </appender>
 
-    <!-- WARN 日志 -->
+    <!-- WARN 日志:按 1MB 大小滚动 -->
     <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/WARN.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_WARN.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/WARN.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_WARN.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>WARN</level>
@@ -79,14 +92,19 @@
         </filter>
     </appender>
 
+    <!-- ERROR 日志:按 1MB 大小滚动 -->
     <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logging.path}/ERROR.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_ERROR.log.gz</fileNamePattern>
+        <file>${LOG_DIR}/ERROR.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}_ERROR.%i.log.gz</fileNamePattern>
+            <maxFileSize>1MB</maxFileSize>
             <maxHistory>${log.maxHistory}</maxHistory>
+            <totalSizeCap>500MB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <pattern>${FILE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>ERROR</level>
@@ -97,8 +115,8 @@
 
     <!-- 降噪配置 -->
     <logger name="springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator" level="WARN"/>
-    <logger name="org.springframework.security.web.DefaultSecurityFilterChain " level="WARN"/>
-    <logger name="com.netflix.config.sources.URLConfigurationSource " level="WARN"/>
+    <logger name="org.springframework.security.web.DefaultSecurityFilterChain" level="WARN"/>
+    <logger name="com.netflix.config.sources.URLConfigurationSource" level="WARN"/>
     <logger name="com.netflix.discovery" level="WARN"/>
     <logger name="org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]" level="WARN"/>