<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <jmxConfigurator/>

    <!--
    %m
    输出代码中指定的消息
    %p
    输出优先级，即DEBUG，INFO，WARN，ERROR，FATAL
    %r
    输出自应用启动到输出该log信息耗费的毫秒数
    %c
    输出所属的类目，通常就是所在类的全名
    %t
    输出产生该日志事件的线程名
    %n
    输出一个回车换行符，Windows平台为“\r\n”，Unix平台为“\n”
    %d
    输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyy MMM dd HH:mm:ss,SSS}，
    输出类似：2002年10月18日 22：10：28，921
    %l
    输出日志事件的发生位置，包括类目名、发生的线程，以及在代码中的行数。举例：Testlog4.main(TestLog4.java:10)
    -->
    <springProperty scope="context" name="spring.application.name" source="spring.application.name"/>
    <springProperty scope="context" name="log.path" source="logging.file.path"/>
    <property name="common-pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS}:[%5p] [%t:%r] [%C{1}:%M:%L] --> %m%n"/>
    <property name="log.level.console" value="INFO"/>
    <springProperty scope="context" name="log.level.nacos" source="logging.level.nacos" defaultValue="WARN"/>

    <contextName>${spring.application.name}-${spring.profiles.active}-logback</contextName>

    <appender name="CONSOLE_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>${log.level.console}</level>
        </filter>
        <encoder>
            <pattern>${common-pattern}</pattern>
        </encoder>
    </appender>

    <appender name="ROOT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/${spring.application.name}/root.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 每天一归档 -->
            <fileNamePattern>${log.path}/${spring.application.name}/%d{yyyy-MM}/root-%d{yyyy-MM-dd}-%i.log.gz
            </fileNamePattern>
            <!-- 单个日志文件最多 100MB, 60天的日志周期，最大不能超过20GB -->
            <maxFileSize>128MB</maxFileSize>
            <maxHistory>60</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${common-pattern}</pattern>
        </encoder>
    </appender>

    <logger name="com.alibaba.nacos.client" level="${log.level.nacos}" additivity="false">
        <appender-ref ref="ROOT_APPENDER"/>
    </logger>

    <logger name="com.alibaba.nacos.client.config" level="${log.level.nacos}" additivity="false">
        <appender-ref ref="ROOT_APPENDER"/>
    </logger>

    <root level="${log.level.console}">
        <appender-ref ref="CONSOLE_APPENDER"/>
        <appender-ref ref="ROOT_APPENDER"/>
    </root>
</configuration>
