<?xml version="1.0" encoding="UTF-8"?>
|
<configuration>
|
<!-- 定义日志文件存储位置 -->
|
<property name="LOG_HOME" value="./logs" />
|
|
<!-- 引入Spring Boot默认配置 -->
|
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
|
|
<!-- 控制台输出配置 -->
|
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
<encoder>
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}) - %msg%n</pattern>
|
<charset>UTF-8</charset>
|
</encoder>
|
</appender>
|
|
<!-- 文件输出配置 - 所有日志 -->
|
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<file>${LOG_HOME}/xiaozhi-esp32-api.log</file>
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
<fileNamePattern>${LOG_HOME}/xiaozhi-esp32-api.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
<maxFileSize>10MB</maxFileSize>
|
<maxHistory>30</maxHistory>
|
<totalSizeCap>2GB</totalSizeCap>
|
</rollingPolicy>
|
<encoder>
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
<charset>UTF-8</charset>
|
</encoder>
|
</appender>
|
|
<!-- 文件输出配置 - 仅错误日志 -->
|
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<file>${LOG_HOME}/error.log</file>
|
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
<level>ERROR</level>
|
</filter>
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
<fileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
<maxFileSize>10MB</maxFileSize>
|
<maxHistory>30</maxHistory>
|
<totalSizeCap>1GB</totalSizeCap>
|
</rollingPolicy>
|
<encoder>
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
<charset>UTF-8</charset>
|
</encoder>
|
</appender>
|
|
<!-- 开发环境配置 -->
|
<springProfile name="dev">
|
<root level="INFO">
|
<appender-ref ref="CONSOLE" />
|
<!-- 开发环境也记录日志文件 -->
|
<appender-ref ref="FILE" />
|
<appender-ref ref="ERROR_FILE" />
|
</root>
|
<logger name="xiaozhi" level="DEBUG" />
|
<logger name="org.springframework.web" level="INFO" />
|
<logger name="org.springboot.sample" level="INFO" />
|
</springProfile>
|
|
<!-- 测试环境配置 -->
|
<springProfile name="test">
|
<root level="INFO">
|
<appender-ref ref="CONSOLE" />
|
<appender-ref ref="FILE" />
|
<appender-ref ref="ERROR_FILE" />
|
</root>
|
<logger name="xiaozhi" level="INFO" />
|
<logger name="org.springframework.web" level="INFO" />
|
<logger name="org.springboot.sample" level="INFO" />
|
</springProfile>
|
|
<!-- 生产环境配置 - 合并两个版本的最佳实践 -->
|
<springProfile name="prod">
|
<!-- 使用本地日志路径 -->
|
<appender name="PROD_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<file>${LOG_HOME}/xiaozhi-esp32-api.log</file>
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
<fileNamePattern>${LOG_HOME}/xiaozhi-esp32-api.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
<maxFileSize>10MB</maxFileSize>
|
<maxHistory>30</maxHistory>
|
<totalSizeCap>2GB</totalSizeCap>
|
</rollingPolicy>
|
<encoder>
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
<charset>UTF-8</charset>
|
</encoder>
|
</appender>
|
|
<!-- 生产环境错误日志 -->
|
<appender name="PROD_ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<file>${LOG_HOME}/error.log</file>
|
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
<level>ERROR</level>
|
</filter>
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
<fileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
<maxFileSize>10MB</maxFileSize>
|
<maxHistory>30</maxHistory>
|
<totalSizeCap>1GB</totalSizeCap>
|
</rollingPolicy>
|
<encoder>
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
<charset>UTF-8</charset>
|
</encoder>
|
</appender>
|
|
<!-- 生产环境根日志配置 -->
|
<root level="INFO">
|
<appender-ref ref="PROD_FILE" />
|
<appender-ref ref="PROD_ERROR_FILE" />
|
<appender-ref ref="CONSOLE" />
|
</root>
|
|
<!-- 特定包的日志级别 -->
|
<logger name="xiaozhi" level="INFO" />
|
<logger name="org.springframework.web" level="ERROR" />
|
<logger name="org.springboot.sample" level="ERROR" />
|
</springProfile>
|
|
<!-- 确保日志目录存在 -->
|
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
|
<resetJUL>true</resetJUL>
|
</contextListener>
|
</configuration>
|