<?xml version="1.0" encoding="UTF-8"?>
<configuration
        scan="true"
        scanPeriod="10 seconds">
    <contextName>
        logback
    </contextName>
    <springProperty
            scope="context"
            name="springAppName"
            source="spring.application.name"/>
    <springProperty
            scope="context"
            name="logPath"
            source="spring.application.logPath"/>
    <!-- 日志储存空间位置 -->
    <springProperty
            name="log.path"
            source="logPath"
            defaultValue="./logs"/>
    <!-- 彩色日志 -->
    <conversionRule
            conversionWord="clr"
            converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule
            conversionWord="wex"
            converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule
            conversionWord="wEx"
            converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
    <!-- 彩色日志格式 -->
    <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}}"/>
    <!-- 输出到控制台 -->
    <appender
            name="CONSOLE"
            class="ch.qos.logback.core.ConsoleAppender">
        <!-- 此日志appender是为开发使用，只配置最底级别，控制台输出的日志级别是大于或等于此级别的日志信息 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>
                debug
            </level>
        </filter>
        <encoder>
            <Pattern>
                ${CONSOLE_LOG_PATTERN}
            </Pattern>
            <!-- 设置字符集 -->
            <charset>
                UTF-8
            </charset>
        </encoder>
    </appender>
    <!-- 输出到文件 -->
    <appender
            name="FILE_ALL"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <!--        <file>-->
        <!--            ${log.path}/log_all.log-->
        <!--        </file>-->
        <!-- 日志文件输出格式 -->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
            <charset>
                UTF-8
            </charset>
            <!-- 设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略，按日期，按大小记录 -->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志归档 -->
            <fileNamePattern>
                ${log.path}/cmeeting_%d{yyyyMMdd}_%i.log
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>
                    200MB
                </maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 日志文件保留天数 -->
            <maxHistory>
                6
            </maxHistory>
        </rollingPolicy>

    </appender>
    <!-- 时间滚动输出 level为 ERROR 日志 -->
    <appender
            name="ERROR_FILE"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>
            ${log.path}/log_error.log
        </file>
        <!-- 日志文件输出格式 -->
        <encoder>
            <pattern>
                %date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level%logger{36}.%M\(%line\)-%msg%n
            </pattern>
            <charset>
                UTF-8
            </charset>
            <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略，按日期，按大小记录 -->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>
                ${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log.gz
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>
                    100MB
                </maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 日志文件保留天数 -->
            <maxHistory>
                15
            </maxHistory>
        </rollingPolicy>
        <!-- 过滤出ERROR级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level> ERROR </level>
            <onMatch> ACCEPT </onMatch>
            <onMismatch> DENY </onMismatch>
        </filter>
    </appender>

    <!-- MyBatis SQL 日志 -->
    <logger name="java.sql.Connection" level="TRACE"/>
    <logger name="java.sql.Statement" level="TRACE"/>
    <logger name="java.sql.PreparedStatement" level="TRACE"/>
    <logger name="java.sql.ResultSet" level="TRACE"/>

    <!-- DAO 包路径（替换为你的Mapper接口包名） -->
    <logger name="com.cmeeting.mapper.primary" level="TRACE"/>
    <logger name="com.cmeeting.mapper.secondary" level="TRACE"/>

    <!-- 3. 若有自定义工具类（如 JDBC 工具类），可开启其 DEBUG 日志（便于打印入参） -->
    <!-- 替换为你的 JDBC 操作所在的包名，例如：com.cmeeting.jdbc -->
    <logger name="com.cmeeting.jdbc" level="DEBUG"/>

<!--    &lt;!&ndash; DAO 包路径（替换为你的Mapper接口包名） &ndash;&gt;-->
    <logger name="com.cmeeting.mapper.primary" level="DEBUG"/>
    <logger name="com.cmeeting.mapper.secondary" level="DEBUG"/>

    <!-- 日志总开关 -->
    <root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE_ALL"/>
        <appender-ref ref="ERROR_FILE"/>
    </root>
</configuration>
