<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <!-- 关闭自身的启动日志 -->
    <statusListener class="ch.qos.logback.core.status.NopStatusListener"/>

    <!-- 随便起个名字 -->
    <contextName>logback</contextName>

    <!-- 项目名 -->
    <property name="PROJECT_NAME" value="service_cms"/>

    <!-- 日志文件输出的位置 -->
    <property name="log.path" value="D://日志//无人机"/>

    <!-- 控制台日志的彩色日志 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="%boldCyan(%date{yyyy-MM-dd HH:mm:ss}) |%boldYellow(%-5level) |%boldBlue(%thread) |%boldMagenta(%file:%line) |%boldRed(%logger) |%boldGreen(%msg%n)"/>

    <!-- 文件日志格式 -->
    <property name="FILE_LOG_PATTERN"
              value="%date{yyyy-MM-dd HH:mm:ss} |%-5level |%thread |%file:%line |%logger |%msg%n"/>

    <!-- 日志的编码方式 -->
    <property name="ENCODING"
              value="UTF-8"/>

    <!-- 输出到控制台 -->
    <!-- appender：日志记录器，name随便写，要见名知意，class=ConsoleAppender代表输出到控制台 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!-- 日志级别，DEBUG及其以上的都会输出到控制台 -->
            <level>DEBUG</level>
        </filter>
        <encoder>
            <!-- 日志格式 -->
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 日志字符集 -->
            <charset>${ENCODING}</charset>
        </encoder>
    </appender>

    <!-- 记录INFO的日志文件，只接收在INFO级别以上的到这个文件，RollingFileAppender：滚动日志 -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志过滤器：此日志文件只记录INFO级别的,不会接受ERROR这些 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/${PROJECT_NAME}/log_info.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>${ENCODING}</charset>
        </encoder>
        <!-- 日志记录器的滚动策略，按日期记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志归档路径以及格式，也就是前面的日志会放进这个位置 -->
            <fileNamePattern>${log.path}/${PROJECT_NAME}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>

            <!-- 当每一天生成的数量都超过100MB了，就算不满足日期，也新生成一个日志文件 -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>

            <!-- 日志文件保留天数，因为文件过多，目录太大，读取也很慢 -->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 记录WARN的日志文件，只接收在INFO级别以上的到这个文件，RollingFileAppender：滚动日志 -->
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志过滤器：此日志文件只记录WARN级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/${PROJECT_NAME}/log_warn.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>${ENCODING}</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略，按日期，按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/${PROJECT_NAME}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 日志文件保留天数 -->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 记录ERROR的日志文件，只接收在INFO级别以上的到这个文件，RollingFileAppender：滚动日志 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志过滤器：此日志文件只记录ERROR级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/${PROJECT_NAME}/log_error.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>${ENCODING}</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略，按日期，按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/${PROJECT_NAME}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 日志文件保留天数 -->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 在开发环境使用这个配置 -->
    <springProfile name="druid">
        <!-- 可以灵活设置此处，从而控制日志的输出，我这里是只输出INFO及其以上的日志信息 -->
<!--        <root level="INFO">-->
<!--            <appender-ref ref="CONSOLE"/>-->
<!--            <appender-ref ref="INFO_FILE"/>-->
<!--            <appender-ref ref="WARN_FILE"/>-->
<!--            <appender-ref ref="ERROR_FILE"/>-->
<!--        </root>-->
        <root level="ERROR">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="ERROR_FILE"/>
        </root>
    </springProfile>

    <!-- 在生产环境使用这个配置 -->
    <springProfile name="pro">
        <root level="ERROR">
            <appender-ref ref="ERROR_FILE"/>
        </root>
    </springProfile>

</configuration>
