|
@@ -1,20 +1,17 @@
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
<configuration scan="true" scanPeriod="60 seconds">
|
|
<configuration scan="true" scanPeriod="60 seconds">
|
|
|
|
|
|
|
|
- <!-- 日志目录,可通过 logging.file.path 或环境变量 LOG_PATH 覆盖 -->
|
|
|
|
|
|
|
+ <!-- 日志目录:logging.file.path 或 fs.log.path -->
|
|
|
<springProperty scope="context" name="LOG_PATH" source="logging.file.path" defaultValue="logs"/>
|
|
<springProperty scope="context" name="LOG_PATH" source="logging.file.path" defaultValue="logs"/>
|
|
|
- <!-- 单文件大小上限,建议 200MB~500MB -->
|
|
|
|
|
- <springProperty scope="context" name="MAX_FILE_SIZE" source="logging.logback.rollingpolicy.max-file-size" defaultValue="300MB"/>
|
|
|
|
|
- <!-- 保留天数 -->
|
|
|
|
|
- <springProperty scope="context" name="MAX_HISTORY" source="logging.logback.rollingpolicy.max-history" defaultValue="60"/>
|
|
|
|
|
- <!-- 所有归档日志总大小上限 -->
|
|
|
|
|
- <springProperty scope="context" name="TOTAL_SIZE_CAP" source="logging.logback.rollingpolicy.total-size-cap" defaultValue="20GB"/>
|
|
|
|
|
|
|
+ <!-- 单文件大小上限(Spring Boot 2.1 请用 fs.log.*,logging.logback.rollingpolicy 需 2.4+) -->
|
|
|
|
|
+ <springProperty scope="context" name="MAX_FILE_SIZE" source="fs.log.max-file-size" defaultValue="300MB"/>
|
|
|
|
|
+ <springProperty scope="context" name="MAX_HISTORY" source="fs.log.max-history" defaultValue="60"/>
|
|
|
|
|
+ <springProperty scope="context" name="TOTAL_SIZE_CAP" source="fs.log.total-size-cap" defaultValue="20GB"/>
|
|
|
|
|
|
|
|
<property name="APP_NAME" value="fs-admin"/>
|
|
<property name="APP_NAME" value="fs-admin"/>
|
|
|
<property name="LOG_CHARSET" value="UTF-8"/>
|
|
<property name="LOG_CHARSET" value="UTF-8"/>
|
|
|
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>
|
|
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>
|
|
|
|
|
|
|
|
- <!-- 控制台(UTF-8,配合 -Dfile.encoding=UTF-8 与 LANG=zh_CN.UTF-8) -->
|
|
|
|
|
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
|
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
|
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
|
|
<pattern>${LOG_PATTERN}</pattern>
|
|
<pattern>${LOG_PATTERN}</pattern>
|
|
@@ -24,29 +21,34 @@
|
|
|
</appender>
|
|
</appender>
|
|
|
|
|
|
|
|
<!--
|
|
<!--
|
|
|
- 按「日期 + 大小」滚动,归档为 UTF-8 文本再 gzip:
|
|
|
|
|
- - 每天凌晨跨日自动切割(fileNamePattern 含 yyyy-MM-dd)
|
|
|
|
|
- - 单文件超过 MAX_FILE_SIZE 时在同一天内继续切割(.%i)
|
|
|
|
|
|
|
+ 使用 TimeBasedRollingPolicy + SizeAndTimeBasedFNATP(Spring Boot 2.1 / logback 1.2 稳定组合)
|
|
|
|
|
+ - 每天跨日切割
|
|
|
|
|
+ - 单文件超过 maxFileSize 时同一天内按 %i 继续切割并 gzip 压缩
|
|
|
|
|
+ 注意:fileNamePattern 必须同时包含 %d 与 %i
|
|
|
-->
|
|
-->
|
|
|
<appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
|
<appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
|
|
<file>${LOG_PATH}/${APP_NAME}.log</file>
|
|
<file>${LOG_PATH}/${APP_NAME}.log</file>
|
|
|
|
|
+ <append>true</append>
|
|
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
|
|
<pattern>${LOG_PATTERN}</pattern>
|
|
<pattern>${LOG_PATTERN}</pattern>
|
|
|
<charset>${LOG_CHARSET}</charset>
|
|
<charset>${LOG_CHARSET}</charset>
|
|
|
<immediateFlush>true</immediateFlush>
|
|
<immediateFlush>true</immediateFlush>
|
|
|
</encoder>
|
|
</encoder>
|
|
|
- <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
|
|
|
|
|
|
+ <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
|
|
<fileNamePattern>${LOG_PATH}/archive/${APP_NAME}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
|
|
<fileNamePattern>${LOG_PATH}/archive/${APP_NAME}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
|
|
|
- <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
|
|
|
|
|
<maxHistory>${MAX_HISTORY}</maxHistory>
|
|
<maxHistory>${MAX_HISTORY}</maxHistory>
|
|
|
<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
|
|
<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
|
|
|
<cleanHistoryOnStart>false</cleanHistoryOnStart>
|
|
<cleanHistoryOnStart>false</cleanHistoryOnStart>
|
|
|
|
|
+ <timeBasedFileNamingAndTriggeringPolicy
|
|
|
|
|
+ class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
|
|
|
|
+ <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
|
|
|
|
|
+ </timeBasedFileNamingAndTriggeringPolicy>
|
|
|
</rollingPolicy>
|
|
</rollingPolicy>
|
|
|
</appender>
|
|
</appender>
|
|
|
|
|
|
|
|
- <!-- ERROR 单独归档(UTF-8) -->
|
|
|
|
|
<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
|
<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
|
|
<file>${LOG_PATH}/${APP_NAME}-error.log</file>
|
|
<file>${LOG_PATH}/${APP_NAME}-error.log</file>
|
|
|
|
|
+ <append>true</append>
|
|
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
|
|
<pattern>${LOG_PATTERN}</pattern>
|
|
<pattern>${LOG_PATTERN}</pattern>
|
|
|
<charset>${LOG_CHARSET}</charset>
|
|
<charset>${LOG_CHARSET}</charset>
|
|
@@ -57,11 +59,15 @@
|
|
|
<onMatch>ACCEPT</onMatch>
|
|
<onMatch>ACCEPT</onMatch>
|
|
|
<onMismatch>DENY</onMismatch>
|
|
<onMismatch>DENY</onMismatch>
|
|
|
</filter>
|
|
</filter>
|
|
|
- <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
|
|
|
|
|
|
+ <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
|
|
<fileNamePattern>${LOG_PATH}/archive/${APP_NAME}-error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
|
|
<fileNamePattern>${LOG_PATH}/archive/${APP_NAME}-error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
|
|
|
- <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
|
|
|
|
|
<maxHistory>${MAX_HISTORY}</maxHistory>
|
|
<maxHistory>${MAX_HISTORY}</maxHistory>
|
|
|
<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
|
|
<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
|
|
|
|
|
+ <cleanHistoryOnStart>false</cleanHistoryOnStart>
|
|
|
|
|
+ <timeBasedFileNamingAndTriggeringPolicy
|
|
|
|
|
+ class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
|
|
|
|
+ <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
|
|
|
|
|
+ </timeBasedFileNamingAndTriggeringPolicy>
|
|
|
</rollingPolicy>
|
|
</rollingPolicy>
|
|
|
</appender>
|
|
</appender>
|
|
|
|
|
|