<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status，这个用于设置log4j2自身内部的信息输出，可以不设置，当设置成trace时，你会看到log4j2内部各种详细输出-->
<!--monitorInterval：Log4j能够自动检测修改配置 文件和重新配置本身，设置间隔秒数-->
<configuration status="WARN" monitorInterval="30">
    <properties>
        <!--需修改，全小写，与 spring.application.name 保持一致-->
        <property name="APP_NAME">upcloud-base-wh-operate</property>
        <!--需修改， 与 eureka.instance.instanceId 保存一致-->
        <property name="INSTANCE_ID">192.168.1.121.9818</property>
        <!--日志存储路径，固定不更改-->
        <property name="LOG_PATH">/usr/local/logs</property>
    </properties>
    <!--先定义所有的appender-->
    <appenders>
        <!--这个输出控制台的配置-->
        <console name="Console" target="SYSTEM_OUT">
            <!--输出日志的格式-->
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%t] [%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-B3-ParentSpanId},%X{X-Span-Export}] [%p]  - %c - %m%n"/>
        </console>
        <!-- 这个会打印出所有的info及以下级别的信息，每次大小超过size，则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩，作为存档-->
        <RollingFile name="RollingFileInfo" fileName="${LOG_PATH}/${APP_NAME}/${INSTANCE_ID}/info.log"
                     filePattern="${LOG_PATH}/${APP_NAME}/${INSTANCE_ID}/last15days/info-%d{yyyy-MM-dd}-%i.log">
            <!--日志写文件只输出level及以上级别的信息（onMatch），其他的直接拒绝（onMismatch）-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%t] [%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-B3-ParentSpanId},%X{X-Span-Export}] [%p]  - %c - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="50 MB"/>
            </Policies>
            <!-- 此行以下为自动清理日志的配置 -->
            <DefaultRolloverStrategy  max="20">
                <Delete basePath="${LOG_PATH}/${APP_NAME}/${INSTANCE_ID}/last15days">
                    <!-- glob 项为需要自动清理日志的pattern -->
                    <IfFileName glob="*.log"/>
                    <!-- 15d 表示自动清理掉15天以前的日志文件 -->
                    <IfLastModified age="15d"/>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
        <RollingFile name="RollingFileWarn" fileName="${LOG_PATH}/${APP_NAME}/${INSTANCE_ID}/warn.log"
                     filePattern="${LOG_PATH}/${APP_NAME}/${INSTANCE_ID}/last15days/warn-%d{yyyy-MM-dd}-%i.log">
            <!--日志写文件只输出level及以上级别的信息（onMatch），其他的直接拒绝（onMismatch）-->
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%t] [%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-B3-ParentSpanId},%X{X-Span-Export}] [%p]  - %c - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="50 MB"/>
            </Policies>
            <!-- 此行以下为自动清理日志的配置 -->
            <DefaultRolloverStrategy  max="20">
                <Delete basePath="${LOG_PATH}/${APP_NAME}/${INSTANCE_ID}/last15days">
                    <!-- glob 项为需要自动清理日志的pattern -->
                    <IfFileName glob="*.log"/>
                    <!-- 15d 表示自动清理掉15天以前的日志文件 -->
                    <IfLastModified age="15d"/>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
        <RollingFile name="RollingFileError" fileName="${LOG_PATH}/${APP_NAME}/${INSTANCE_ID}/error.log"
                     filePattern="${LOG_PATH}/${APP_NAME}/${INSTANCE_ID}/last15days/error-%d{yyyy-MM-dd}-%i.log">
            <!--日志写文件只输出level及以上级别的信息（onMatch），其他的直接拒绝（onMismatch）-->
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%t] [%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-B3-ParentSpanId},%X{X-Span-Export}] [%p]  - %c - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="50 MB"/>
            </Policies>
            <!-- 此行以下为自动清理日志的配置 -->
            <DefaultRolloverStrategy  max="20">
                <Delete basePath="${LOG_PATH}/${APP_NAME}/${INSTANCE_ID}/last15days">
                    <!-- glob 项为需要自动清理日志的pattern -->
                    <IfFileName glob="*.log"/>
                    <!-- 15d 表示自动清理掉15天以前的日志文件 -->
                    <IfLastModified age="15d"/>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
    </appenders>
    <!--然后定义logger，只有定义了logger并引入的appender，appender才会生效-->
    <loggers>
        <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
        <logger name="org.hibernate" level="INFO"></logger>
        <logger name="org.apache" level="INFO"></logger>
        <logger name="springfox.documentation" level="INFO"></logger>
        <logger name="com.netflix" level="INFO"></logger>
        <logger name="io.lettuce.core.protocol.RedisStateMachine" level="INFO"></logger>
        <logger name="io.lettuce.core.protocol.CommandHandler" level="INFO"></logger>
        <logger name="io.lettuce.core.protocol.DefaultEndpoint" level="INFO"></logger>
        <root level="DEBUG">
            <appender-ref ref="Console"/>
            <appender-ref ref="RollingFileInfo"/>
            <appender-ref ref="RollingFileWarn"/>
            <appender-ref ref="RollingFileError"/>
        </root>
    </loggers>
</configuration>
