<?xml version="1.0" encoding="UTF-8"?>


<configuration debug="false" scan="false">
	<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
	<springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/>
	<springProperty scope="context" name="plumelog.kafka.hosts" source="plumelog.kafka.hosts"/>
	<springProperty scope="context" name="plumelog.redis.hosts" source="plumelog.redis.hosts" />
	<springProperty scope="context" name="plumelog.redis.auth" source="plumelog.redis.auth" />
	<springProperty scope="context" name="plumelog.redis.db" source="plumelog.redis.db" />
	<springProperty scope="context" name="plumelog.env" source="spring.profiles.active"/>

	<property name="log.kafka.hosts" value="${plumelog.kafka.hosts}" />
	<property name="log.redis.hosts" value="${plumelog.redis.hosts}" />
	<property name="log.redis.auth" value="${plumelog.redis.auth}" />
	<property name="log.redis.db" value="${plumelog.redis.db}"/>
	<property name="log.path" value="logs/${spring.application.name}"/>
	<property name="log.env" value="${plumelog.env}"/>

	<!-- 彩色日志格式 -->
	<property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} TRACE[%X{traceId:-} / %X{span:-}] [%clr(%5p) %clr(${PID:- } %clr(%15.15t){faint}] %clr(---){faint}){magenta} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx"/>
	<!-- 彩色日志依赖的渲染类 -->
	<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
	<conversionRule conversionWord="wex"
					converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
	<conversionRule conversionWord="wEx"
					converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>

	<!-- Console log output -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
			<!-- 设置字符集 -->
			<charset>UTF-8</charset>
		</encoder>
	</appender>
	<!-- Log file info output -->
	<appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${log.path}/info.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
			<maxHistory>5</maxHistory>
			<maxFileSize>500MB</maxFileSize>
		</rollingPolicy>
		<encoder>
			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>info</level>
		</filter>
	</appender>

	<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${log.path}/debug.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${log.path}/debug.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
			<maxHistory>5</maxHistory>
			<maxFileSize>500MB</maxFileSize>
		</rollingPolicy>
		<encoder>
			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>debug</level>
		</filter>
	</appender>

	<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${log.path}/error.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
			<maxHistory>5</maxHistory>
			<maxFileSize>500MB</maxFileSize>
		</rollingPolicy>
		<encoder>
			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>error</level>
		</filter>
	</appender>

	<!--nacos 心跳 INFO 屏蔽-->
	<logger name="com.alibaba.cloud.nacos" level="info">
	</logger>
	<logger name="org.redisson.connection.SentinelConnectionManager" level="OFF" />
	<logger name="org.redisson.connection.MasterSlaveEntry" level="OFF" />
	<logger name="org.redisson.connection.pool.PubSubConnectionPool" level="OFF" />
	<logger name="org.redisson.connection.pool.SlaveConnectionPool" level="OFF" />
	<logger name="org.redisson.connection.balancer.LoadBalancerManager" level="OFF" />
	<!-- 使用kafka启用下面配置 -->
	<!--	<appender name="plumelog" class="com.plumelog.logback.appender.KafkaAppender">-->
	<!--		<appName>${spring.application.name}</appName>-->
	<!--		<kafkaHosts>${log.hosts}</kafkaHosts>-->
	<!--	</appender>-->

	<!--redis-->
	<!--	<appender name="redisPlumelog" class="com.plumelog.logback.appender.RedisAppender">-->
	<!--		<appName>${spring.application.name}</appName>-->
	<!--		<redisHost>${log.redis.hosts}</redisHost>-->
	<!--		<redisAuth>${log.redis.auth}</redisAuth>-->
	<!--		<redisDb>${log.redis.db}</redisDb>-->
	<!--		<env>${log.env}</env>-->
	<!--	</appender>-->

	<!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 -->
	<root level="info">
		<appender-ref ref="console"/>
		<appender-ref ref="info"/>
		<appender-ref ref="debug"/>
		<appender-ref ref="error"/>
		<!-- 输出plumelog -->
		<!--		<appender-ref ref="redisPlumelog"/>-->
	</root>
</configuration>
