<?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-gsp</property>
          <!--需修改， 与 eureka.instance.instanceId 保存一致-->
          <property name="INSTANCE_ID">192.168.40.134.9822</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>

         <!--这个输出钉钉的配置-->
         <DingTalk name="DingTalk" webhook="https://oapi.dingtalk.com/robot/send?access_token=5beafa76556c2bf862321c01ca1826df54f736158df200197f5d5b7aaa7277e5" sign="SECfa7adca4b0de4b374e6a7d0db3797410b83803d8b7bd8f6bb52d09f51e3f2908" serviceName="${APP_NAME}" instance="${INSTANCE_ID}" >
             <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"/>
         </DingTalk>

         <!-- 这个会打印出所有的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="INFO">
             <appender-ref ref="Console"/>
             <appender-ref ref="RollingFileInfo"/>
             <appender-ref ref="RollingFileWarn"/>
             <appender-ref ref="RollingFileError"/>
             <appender-ref ref="DingTalk"/>
         </root>
     </loggers>
 </configuration>