<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="PATH" value="./log"/>
    <property name="APP_NAME" value="tsl-data" />
    <!-- 用于在console输出日志 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <Pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} %-5level [%thread] %X{traceId} %logger:%line %msg%n</Pattern>
            <!-- 使用系统默认的编码方式 -->
            <!-- <charset>gbk</charset> -->
        </encoder>
    </appender>
    <!-- 用于写入日志文件 -->
    <appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${PATH}/${APP_NAME}-trace.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 每天切换日志文件 -->
            <fileNamePattern>${PATH}/${APP_NAME}-trace.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 单个文件最大值，超过会切换新的日志文件，此配置最大不超过20GB -->
            <maxFileSize>100MB</maxFileSize>
            <!-- 最多保存60天日志 -->
            <maxHistory>60</maxHistory>
            <!-- 最大占用20GB空间 -->
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <Pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} %-5level [%thread] %X{traceId} %logger:%line %msg%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- 错误日志写入文件 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${PATH}/${APP_NAME}-error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 每天切换日志文件 -->
            <fileNamePattern>${PATH}/${APP_NAME}-error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 单个文件最大值，超过会切换新的日志文件，此配置最大不超过20GB -->
            <maxFileSize>100MB</maxFileSize>
            <!-- 最多保存60天日志 -->
            <maxHistory>60</maxHistory>
            <!-- 最大占用20GB空间 -->
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <Pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} %-5level [%thread] %X{traceId} %logger:%line %msg%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 错误日志仅保存ERROR级别 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 1. 输出SQL 到控制台和文件-->
    <logger name="org.hibernate.SQL" additivity="false" level="DEBUG">
        <appender-ref ref="TRACE_FILE"/>
        <appender-ref ref="ERROR_FILE"/>
        <appender-ref ref="STDOUT"/>
    </logger>
    <!-- 2. 输出SQL 的参数到控制台和文件-->
    <logger name="org.hibernate.type.descriptor.sql.BasicBinder" additivity="false" level="TRACE">
        <appender-ref ref="TRACE_FILE"/>
        <appender-ref ref="ERROR_FILE"/>
        <appender-ref ref="STDOUT"/>
    </logger>
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="TRACE_FILE"/>
        <appender-ref ref="ERROR_FILE"/>
    </root>
</configuration>