<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">

    <!-- 单个日志文件的最大，尺寸 -->

    <springProperty scope="context" name="maxFileSize"

                    source="logging.file.max-size" defaultValue="10MB"/>

    <!-- 日志保留时长 (天) -->

    <springProperty scope="context" name="maxHistory"

                    source="logging.file.max-history" defaultValue="15"/>


    <!--定义日志文件的存储地址 -->
    <property name="LOG_HOME" value="../logs"/>

    <!-- 彩色日志 -->
    <!-- conversionWord：指定在pattern中使用的别名 -->
    <!-- converterClass：指定使用彩色日志渲染类 -->
    <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="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }) %clr(---){faint} %clr([%10t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wex"/>

    <property name="FILE_LOG_PATTERN"

              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } --- [%t] %-40.40logger{39} : %m%n%wex"/>

    <!--<property name="COLOR_PATTERN" value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta( %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''})- %gray(%msg%xEx%n)" />-->
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是为开发使用，只配置最底级别，控制台输出的日志级别是大于或等于此级别的日志信息-->
        <!--        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
        <!--            <level>debug</level>-->
        <!--        </filter>-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出：%d表示日期，%thread表示线程名，%-5level：级别从左显示5个字符宽度%msg：日志消息，%n是换行符
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>-->
            <!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n</pattern>-->
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_HOME}/adweb3-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数 -->
            <MaxHistory>30</MaxHistory>
            <maxFileSize>10MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出：%d表示日期，%thread表示线程名，%-5level：级别从左显示5个字符宽度%msg：日志消息，%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
        </encoder>
    </appender>

    <!--    &lt;!&ndash; 生成 error html格式日志开始 &ndash;&gt;-->
    <!--    <appender name="HTML" class="ch.qos.logback.core.FileAppender">-->
    <!--        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
    <!--            &lt;!&ndash;设置日志级别,过滤掉info日志,只输入error日志&ndash;&gt;-->
    <!--            <level>ERROR</level>-->
    <!--        </filter>-->
    <!--        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">-->
    <!--            <layout class="ch.qos.logback.classic.html.HTMLLayout">-->
    <!--                <pattern>%p%d%msg%M%F{32}%L</pattern>-->
    <!--            </layout>-->
    <!--        </encoder>-->
    <!--        <file>${LOG_HOME}/error-log.html</file>-->
    <!--    </appender>-->
    <!--    &lt;!&ndash; 生成 error html格式日志结束 &ndash;&gt;-->

    <!--    &lt;!&ndash; 每天生成一个html格式的日志开始 &ndash;&gt;-->
    <!--    <appender name="FILE_HTML" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
    <!--        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">-->
    <!--            &lt;!&ndash;日志文件输出的文件名 &ndash;&gt;-->
    <!--            <FileNamePattern>${LOG_HOME}/jeecgboot-%d{yyyy-MM-dd}.%i.html</FileNamePattern>-->
    <!--            &lt;!&ndash;日志文件保留天数 &ndash;&gt;-->
    <!--            <MaxHistory>30</MaxHistory>-->
    <!--            <MaxFileSize>10MB</MaxFileSize>-->
    <!--        </rollingPolicy>-->
    <!--        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">-->
    <!--            <layout class="ch.qos.logback.classic.html.HTMLLayout">-->
    <!--                <pattern>%p%d%msg%M%F{32}%L</pattern>-->
    <!--            </layout>-->
    <!--        </encoder>-->
    <!--    </appender>-->
    <!--    &lt;!&ndash; 每天生成一个html格式的日志结束 &ndash;&gt;-->

    <!-- info日志 appender -->

    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${LOG_HOME}/adweb3-info.log</file>
        <!-- 追加方式记录日志默认是true 日志被追加到文件结尾 -->
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <!-- 按天回滚 daily -->

            <!-- 归档的日志文件的路径，%d{yyyy-MM-dd}指定日期格式，%i指定索引 -->

            <fileNamePattern>${LOG_HOME}/adweb3-info/adweb3-info-%d{yyyy-MM-dd}-%i.log</fileNamePattern>

            <!-- 日志最大的历史 30天 -->

            <maxHistory>${maxHistory}</maxHistory>

            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

                <!-- maxFileSize:这是活动文件的大小，默认值是10MB，这里设置为20MB -->

                <maxFileSize>20MB</maxFileSize>

            </timeBasedFileNamingAndTriggeringPolicy>

        </rollingPolicy>


        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">

            <pattern>${FILE_LOG_PATTERN}</pattern>

        </encoder>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">

            <!-- 只打印info日志 -->

            <level>INFO</level>

            <onMatch>ACCEPT</onMatch>

            <onMismatch>DENY</onMismatch>

        </filter>

    </appender>


    <!-- DEBUG日志 appender -->

    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">


        <!-- 正在记录的日志文件的路径及文件名 -->

        <file>${LOG_HOME}/adweb3-debug.log</file>

        <!-- 追加方式记录日志默认是true 日志被追加到文件结尾 -->

        <append>true</append>


        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <!-- 按天回滚 daily -->

            <fileNamePattern>${LOG_HOME}/adweb3-debug/adweb3-debug-%d{yyyy-MM-dd}-%i.log</fileNamePattern>

            <!-- 日志最大的历史 30天 -->

            <maxHistory>${maxHistory}</maxHistory>

            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

                <!-- maxFileSize:这是活动文件的大小，默认值是10MB，这里设置为20MB -->

                <maxFileSize>${maxFileSize}</maxFileSize>

            </timeBasedFileNamingAndTriggeringPolicy>

        </rollingPolicy>


        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">

            <pattern>${FILE_LOG_PATTERN}</pattern>

        </encoder>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">

            <!-- 只打印DEBUG日志 -->

            <level>DEBUG</level>

            <onMatch>ACCEPT</onMatch>

            <onMismatch>DENY</onMismatch>

        </filter>

    </appender>


    <!-- WARN日志 appender -->

    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">


        <!-- 正在记录的日志文件的路径及文件名 -->

        <file>${LOG_HOME}/adweb3-warn.log</file>

        <!-- 追加方式记录日志默认是true 日志被追加到文件结尾 -->

        <append>true</append>


        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <!-- 按天回滚 daily -->

            <fileNamePattern>${LOG_HOME}/adweb3-warn/adweb3-warn-%d{yyyy-MM-dd}-%i.log</fileNamePattern>

            <!-- 日志最大的历史 30天 -->

            <maxHistory>${maxHistory}</maxHistory>

            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

                <!-- maxFileSize:这是活动文件的大小，默认值是10MB，这里设置为20MB -->

                <maxFileSize>${maxFileSize}</maxFileSize>

            </timeBasedFileNamingAndTriggeringPolicy>

        </rollingPolicy>


        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">

            <pattern>${FILE_LOG_PATTERN}</pattern>

        </encoder>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">

            <!-- 只打印WARN日志 -->

            <level>WARN</level>

            <onMatch>ACCEPT</onMatch>

            <onMismatch>DENY</onMismatch>

        </filter>

    </appender>


    <!-- error 日志 appender -->

    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">


        <!-- 正在记录的日志文件的路径及文件名 -->

        <file>${LOG_HOME}/adweb3-error.log</file>

        <!-- 追加方式记录日志默认是true 日志被追加到文件结尾 -->

        <append>true</append>


        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <!-- 按天回滚 daily -->

            <fileNamePattern>${LOG_HOME}/adweb3-error/adweb3-error-%d{yyyy-MM-dd}-%i.log</fileNamePattern>

            <!-- 日志最大的历史 30天 -->

            <maxHistory>${maxHistory}</maxHistory>

            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

                <!-- maxFileSize:这是活动文件的大小，默认值是10MB，这里设置为20MB -->

                <maxFileSize>1MB</maxFileSize>

            </timeBasedFileNamingAndTriggeringPolicy>

        </rollingPolicy>


        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">

            <pattern>${FILE_LOG_PATTERN}</pattern>

        </encoder>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">

            <!-- 只打印错误日志 -->

            <level>ERROR</level>

            <onMatch>ACCEPT</onMatch>

            <onMismatch>DENY</onMismatch>

        </filter>

    </appender>


    <!--myibatis log configure -->
    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
    <logger name="java.sql" level="DEBUG"/>


    <!-- 4. 最终的策略 -->
    <!-- 4.1 开发环境:打印控制台-->
    <springProfile name="dev|test">
        <!--控制台和日志文件输出级别-->
        <root level="DEBUG">
            <appender-ref ref="STDOUT"/>
        </root>
    </springProfile>

    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="INFO"/>
        <appender-ref ref="ERROR"/>
        <appender-ref ref="DEBUG"/>
        <appender-ref ref="WARN"/>
    </root>

    <!-- 生产环境，日志输出到文件 -->
    <!--    <springProfile name="prod">-->
    <!--        <root level="INFO">-->
    <!--            <appender-ref ref="STDOUT"/>-->
    <!--            <appender-ref ref="FILE"/>-->
    <!--            <appender-ref ref="INFO"/>-->
    <!--            <appender-ref ref="ERROR"/>-->
    <!--            <appender-ref ref="DEBUG"/>-->
    <!--            <appender-ref ref="WARN"/>-->
    <!--        </root>-->
    <!--    </springProfile>-->

</configuration>