worklog/worklog-api/src/main/resources/logback-spring.xml
zhangjf 13655445d2 refactor: 后台API日志配置优化
- service.properties: 移除重复日志配置(已由env.properties定义)
- logback-spring.xml: ERROR日志只输出到error.log
  - AOP_FILE/APP_FILE/SQL_FILE/CONSOLE添加ERROR过滤器
  - 更新注释说明配置来源于env.properties
2026-02-26 19:12:57 +08:00

133 lines
5.8 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 从 env.properties 读取配置(生产环境由 start.sh 注入为系统属性,开发环境通过 spring.config.import 加载) -->
<springProperty scope="context" name="APP_NAME" source="APP_NAME" defaultValue="worklog-api"/>
<springProperty scope="context" name="LOG_PATH" source="LOG_PATH" defaultValue="./logs"/>
<springProperty scope="context" name="LOG_LEVEL_ROOT" source="LOG_LEVEL_ROOT" defaultValue="INFO"/>
<springProperty scope="context" name="LOG_LEVEL_APP" source="LOG_LEVEL_APP" defaultValue="DEBUG"/>
<!-- 日志格式:包含 traceId 和 spanId -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId:-}][%X{spanId:-}] %-5level %logger{50} - %msg%n"/>
<!-- ===== Appenders ===== -->
<!-- 1. AOP日志ApiLogAspect 请求/响应日志不含ERRORERROR只输出到error.log -->
<appender name="AOP_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/aop.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/aop-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<!-- 2. 应用日志com.wjbl.worklog 业务日志不含ERRORERROR只输出到error.log -->
<appender name="APP_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/app.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/app-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<!-- 3. SQL日志数据库操作日志不含ERRORERROR只输出到error.log -->
<appender name="SQL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/sql.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/sql-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<!-- 4. 异常日志:所有 ERROR 级别日志集中输出 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/error.log</file>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<!-- 控制台输出开发环境调试用不含ERRORERROR只输出到error.log -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- ===== Loggers ===== -->
<!-- ApiLogAspect → aop.log比 com.wjbl.worklog 更具体,优先匹配) -->
<logger name="com.wjbl.worklog.config.ApiLogAspect" level="DEBUG" additivity="false">
<appender-ref ref="AOP_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</logger>
<!-- MyBatis Mapper SQL → sql.log -->
<logger name="com.wjbl.worklog.data.mapper" level="DEBUG" additivity="false">
<appender-ref ref="SQL_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</logger>
<!-- MyBatis-Plus 框架 SQL → sql.log -->
<logger name="com.baomidou.mybatisplus" level="DEBUG" additivity="false">
<appender-ref ref="SQL_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</logger>
<!-- com.wjbl.worklog 业务日志 → app.logApiLogAspect 和 mapper 已被上方更具体的 logger 拦截) -->
<logger name="com.wjbl.worklog" level="${LOG_LEVEL_APP}" additivity="false">
<appender-ref ref="APP_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</logger>
<!-- 根日志:其余所有日志 → stdout.log -->
<root level="${LOG_LEVEL_ROOT}">
<appender-ref ref="ERROR_FILE"/>
<appender-ref ref="CONSOLE"/>
</root>
</configuration>