<?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.110.50.9818</property>
        <!--日志存储路径-->
        <property name="LOG_PATH">/usr/local/logs</property>
    </properties>

    <!--先定义所有的appender-->
    <appenders>


        <!-- 这个会打印出所有的info及以下级别的信息，每次大小超过size，则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩，作为存档-->
        <RollingFile name="RollingFileInfo" fileName="${LOG_PATH}/${APP_NAME}/${INSTANCE_ID}/info.log"

                     filePattern="${LOG_PATH}/${APP_NAME}/${INSTANCE_ID}/$${date:yyyy-MM}/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}logs/${APP_NAME}">
                    <!-- glob 项为需要自动清理日志的pattern -->
                    <IfFileName glob="*.log"/>
                    <!-- 5d 表示自动清理掉5天以前的日志文件 -->
                    <IfLastModified age="5d"/>
                </Delete>
            </DefaultRolloverStrategy>

        </RollingFile>

        <RollingFile name="RollingFileWarn" fileName="${LOG_PATH}/${APP_NAME}/${INSTANCE_ID}/warn.log"

                     filePattern="${LOG_PATH}/${APP_NAME}/${INSTANCE_ID}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">

            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>

            <!-- <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/> -->
            <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}logs/${APP_NAME}">
                    <!-- glob 项为需要自动清理日志的pattern -->
                    <IfFileName glob="*.log"/>
                    <!-- 5d 表示自动清理掉5天以前的日志文件 -->
                    <IfLastModified age="5d"/>
                </Delete>
            </DefaultRolloverStrategy>

        </RollingFile>

        <RollingFile name="RollingFileError" fileName="${LOG_PATH}/${APP_NAME}/${INSTANCE_ID}/error.log"

                     filePattern="${LOG_PATH}/${APP_NAME}/${INSTANCE_ID}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">

            <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}logs/${APP_NAME}">
                    <!-- glob 项为需要自动清理日志的pattern -->
                    <IfFileName glob="*.log"/>
                    <!-- 5d 表示自动清理掉5天以前的日志文件 -->
                    <IfLastModified age="5d"/>
                </Delete>
            </DefaultRolloverStrategy>

        </RollingFile>

    </appenders>

    <!--然后定义logger，只有定义了logger并引入的appender，appender才会生效-->

    <loggers>
        <root level="INFO">
            <appender-ref ref="RollingFileInfo"/>
            <appender-ref ref="RollingFileWarn"/>
            <appender-ref ref="RollingFileError"/>
        </root>
    </loggers>

</configuration>
