|
|
@@ -0,0 +1,168 @@
|
|
|
+<?xml version="1.0" encoding="UTF-8"?>
|
|
|
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
|
|
+
|
|
|
+ <!--
|
|
|
+ 配置说明:
|
|
|
+ - scan="true": 配置文件发生变化时自动重新加载
|
|
|
+ - scanPeriod: 扫描间隔时间
|
|
|
+ - debug: 是否打印 logback 内部日志
|
|
|
+ -->
|
|
|
+
|
|
|
+ <!-- ========== 1. 定义变量,方便统一管理 ========== -->
|
|
|
+ <!-- 日志存放路径 -->
|
|
|
+ <property name="LOG_HOME" value="logs" />
|
|
|
+ <!-- 日志文件最大保留天数 -->
|
|
|
+ <property name="MAX_HISTORY" value="30" />
|
|
|
+ <!-- 单个日志文件最大大小 -->
|
|
|
+ <property name="MAX_FILE_SIZE" value="100MB" />
|
|
|
+ <!-- 日志总大小限制(可选) -->
|
|
|
+ <property name="TOTAL_SIZE_CAP" value="10GB" />
|
|
|
+
|
|
|
+ <!-- ========== 2. 控制台输出配置 ========== -->
|
|
|
+ <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
|
|
+ <!-- 日志输出格式 -->
|
|
|
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
|
|
+ <!--
|
|
|
+ 格式说明:
|
|
|
+ %d{yyyy-MM-dd HH:mm:ss.SSS} 日期时间
|
|
|
+ %-5level 日志级别(左对齐,5个字符宽度)
|
|
|
+ %thread 线程名称
|
|
|
+ %logger{50} 日志记录器名称(最多50个字符)
|
|
|
+ %msg 日志消息
|
|
|
+ %n 换行
|
|
|
+ -->
|
|
|
+ <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
|
|
+ <charset>UTF-8</charset>
|
|
|
+ </encoder>
|
|
|
+ <!-- 日志级别阈值:只输出 INFO 及以上级别的日志到控制台 -->
|
|
|
+ <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
|
|
+ <level>DEBUG</level>
|
|
|
+ </filter>
|
|
|
+ </appender>
|
|
|
+
|
|
|
+ <!-- ========== 3. 文件输出配置 ========== -->
|
|
|
+ <!-- 3.1 普通日志文件(INFO 级别) -->
|
|
|
+ <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
|
|
+ <!-- 正在记录的日志文件 -->
|
|
|
+ <file>${LOG_HOME}/ssm-info.log</file>
|
|
|
+
|
|
|
+ <!-- 日志输出格式 -->
|
|
|
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
|
|
+ <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.SizeAndTimeBasedRollingPolicy">
|
|
|
+ <!-- 按天滚动,文件命名格式 -->
|
|
|
+ <fileNamePattern>${LOG_HOME}/archive/ssm-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
|
|
+ <!-- 每个日志文件最大大小 -->
|
|
|
+ <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
|
|
|
+ <!-- 日志保留天数 -->
|
|
|
+ <maxHistory>${MAX_HISTORY}</maxHistory>
|
|
|
+ <!-- 日志总大小上限 -->
|
|
|
+ <totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
|
|
|
+ </rollingPolicy>
|
|
|
+
|
|
|
+ <!-- 过滤器:只输出 INFO 级别的日志 -->
|
|
|
+ <filter class="ch.qos.logback.classic.filter.LevelFilter">
|
|
|
+ <level>INFO</level>
|
|
|
+ <onMatch>ACCEPT</onMatch>
|
|
|
+ <onMismatch>DENY</onMismatch>
|
|
|
+ </filter>
|
|
|
+ </appender>
|
|
|
+
|
|
|
+ <!-- 3.2 错误日志文件(ERROR 级别,单独记录) -->
|
|
|
+ <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
|
|
+ <file>${LOG_HOME}/ssm-error.log</file>
|
|
|
+
|
|
|
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
|
|
+ <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.SizeAndTimeBasedRollingPolicy">
|
|
|
+ <fileNamePattern>${LOG_HOME}/archive/ssm-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
|
|
+ <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
|
|
|
+ <maxHistory>${MAX_HISTORY}</maxHistory>
|
|
|
+ <totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
|
|
|
+ </rollingPolicy>
|
|
|
+
|
|
|
+ <!-- 过滤器:只输出 ERROR 级别的日志 -->
|
|
|
+ <filter class="ch.qos.logback.classic.filter.LevelFilter">
|
|
|
+ <level>ERROR</level>
|
|
|
+ <onMatch>ACCEPT</onMatch>
|
|
|
+ <onMismatch>DENY</onMismatch>
|
|
|
+ </filter>
|
|
|
+ </appender>
|
|
|
+
|
|
|
+ <!-- 3.3 调试日志文件(DEBUG 级别,用于开发环境) -->
|
|
|
+ <appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
|
|
+ <file>${LOG_HOME}/ssm-debug.log</file>
|
|
|
+
|
|
|
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
|
|
+ <!-- DEBUG 模式输出更详细的信息:包括行号、方法名 -->
|
|
|
+ <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - [%method:%line] - %msg%n</pattern>
|
|
|
+ <charset>UTF-8</charset>
|
|
|
+ </encoder>
|
|
|
+
|
|
|
+ <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
|
|
+ <fileNamePattern>${LOG_HOME}/archive/ssm-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
|
|
+ <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
|
|
|
+ <maxHistory>7</maxHistory> <!-- DEBUG 日志只保留7天 -->
|
|
|
+ </rollingPolicy>
|
|
|
+
|
|
|
+ <!-- 过滤器:只输出 DEBUG 级别的日志 -->
|
|
|
+ <filter class="ch.qos.logback.classic.filter.LevelFilter">
|
|
|
+ <level>DEBUG</level>
|
|
|
+ <onMatch>ACCEPT</onMatch>
|
|
|
+ <onMismatch>DENY</onMismatch>
|
|
|
+ </filter>
|
|
|
+ </appender>
|
|
|
+
|
|
|
+ <!-- ========== 4. 异步日志配置(提升性能) ========== -->
|
|
|
+ <appender name="ASYNC_INFO" class="ch.qos.logback.classic.AsyncAppender">
|
|
|
+ <!-- 不丢失日志,默认如果队列满80%会丢弃日志,设为从不丢弃 -->
|
|
|
+ <discardingThreshold>0</discardingThreshold>
|
|
|
+ <!-- 队列大小 -->
|
|
|
+ <queueSize>1024</queueSize>
|
|
|
+ <!-- 引用前面的 INFO 文件 appender -->
|
|
|
+ <appender-ref ref="FILE_INFO" />
|
|
|
+ </appender>
|
|
|
+
|
|
|
+ <appender name="ASYNC_ERROR" class="ch.qos.logback.classic.AsyncAppender">
|
|
|
+ <discardingThreshold>0</discardingThreshold>
|
|
|
+ <queueSize>1024</queueSize>
|
|
|
+ <appender-ref ref="FILE_ERROR" />
|
|
|
+ </appender>
|
|
|
+
|
|
|
+ <!-- ========== 5. 日志级别配置 ========== -->
|
|
|
+ <!--
|
|
|
+ root 是根日志记录器,所有未指定包的日志都使用这个级别
|
|
|
+ 日志级别优先级:TRACE < DEBUG < INFO < WARN < ERROR
|
|
|
+ -->
|
|
|
+ <root level="INFO">
|
|
|
+ <appender-ref ref="CONSOLE" />
|
|
|
+ <appender-ref ref="ASYNC_INFO" />
|
|
|
+ <appender-ref ref="ASYNC_ERROR" />
|
|
|
+ </root>
|
|
|
+
|
|
|
+ <!-- 开发环境可以降低 MyBatis 日志级别,查看 SQL 执行情况 -->
|
|
|
+ <logger name="com.yourpackage.mapper" level="DEBUG" additivity="false">
|
|
|
+ <appender-ref ref="CONSOLE" />
|
|
|
+ <appender-ref ref="FILE_DEBUG" />
|
|
|
+ </logger>
|
|
|
+
|
|
|
+ <!-- 打印 Spring 框架的 WARN 及以上级别日志,减少控制台干扰 -->
|
|
|
+ <logger name="org.springframework" level="WARN" />
|
|
|
+
|
|
|
+ <!-- 打印 MyBatis 的 SQL 参数绑定 -->
|
|
|
+ <logger name="org.apache.ibatis" level="DEBUG" />
|
|
|
+
|
|
|
+ <!-- 打印连接池日志 -->
|
|
|
+ <logger name="com.alibaba.druid" level="WARN" />
|
|
|
+
|
|
|
+ <!-- 打印 Thymeleaf 引擎日志(生产环境可设为 ERROR) -->
|
|
|
+ <logger name="org.thymeleaf" level="INFO" />
|
|
|
+
|
|
|
+</configuration>
|