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

	<springProperty scope="context" name="applicationName"  source="spring.application.name" />
	<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level  [%X{EagleEye-TraceID}-%X{traceId}]  %logger{50} - %msg%n"/>

	<!--定义日志文件的存储地址 -->
	<property name="LOG_HOME" value="${HOME}/logs/${applicationName}/" />

	<!-- 控制台输出 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
			<pattern>${LOG_PATTERN}</pattern>
		</encoder>
	</appender>

	<!-- SERVICE_LOG  -->
	<appender name="SERVICE_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>${LOG_HOME}/service.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<!--日志文件输出的文件名-->
			<FileNamePattern>${LOG_HOME}/service.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
			<!--日志文件保留天数-->
			<maxHistory>7</maxHistory>
			<maxFileSize>30MB</maxFileSize>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
			<pattern>${LOG_PATTERN}</pattern>
		</encoder>
	</appender>

	<appender name="ASYNC_SERVICE_APPENDER" class="ch.qos.logback.classic.AsyncAppender">
		<appender-ref ref="SERVICE_APPENDER"/>
		<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
		<discardingThreshold>0</discardingThreshold>
		<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
		<queueSize>256</queueSize>
	</appender>

	<logger name="SERVICE_LOG" level="INFO" additivity="false">
		<appender-ref ref="ASYNC_SERVICE_APPENDER" />
	</logger>

	<!-- SAL_LOG -->
	<appender name="SAL_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>${LOG_HOME}/sal.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<!--日志文件输出的文件名-->
			<FileNamePattern>${LOG_HOME}/sal.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
			<!--日志文件保留天数-->
			<maxHistory>7</maxHistory>
			<maxFileSize>30MB</maxFileSize>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
			<pattern>${LOG_PATTERN}</pattern>
		</encoder>
	</appender>

	<appender name="ASYNC_SAL_APPENDER" class="ch.qos.logback.classic.AsyncAppender">
		<appender-ref ref="SAL_APPENDER"/>
		<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
		<discardingThreshold>0</discardingThreshold>
		<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
		<queueSize>256</queueSize>
	</appender>

	<logger name="SAL_LOG" level="INFO" additivity="false">
		<appender-ref ref="ASYNC_SAL_APPENDER" />
	</logger>

	<!-- DAL_LOG -->
	<appender name="DAL_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>${LOG_HOME}/dal.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<!--日志文件输出的文件名-->
			<FileNamePattern>${LOG_HOME}/dal.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
			<!--日志文件保留天数-->
			<maxHistory>7</maxHistory>
			<maxFileSize>30MB</maxFileSize>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
			<pattern>${LOG_PATTERN}</pattern>
		</encoder>
	</appender>

	<appender name="ASYNC_DAL_APPENDER" class="ch.qos.logback.classic.AsyncAppender">
		<appender-ref ref="DAL_APPENDER"/>
		<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
		<discardingThreshold>0</discardingThreshold>
		<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
		<queueSize>256</queueSize>
	</appender>

	<logger name="DAL_LOG" level="INFO" additivity="false">
		<appender-ref ref="ASYNC_DAL_APPENDER" />
	</logger>


	<!-- ERROR_LOG -->
	<appender name="ERROR_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>${LOG_HOME}/error.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<!--日志文件输出的文件名-->
			<FileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
			<!--日志文件保留天数-->
			<maxHistory>7</maxHistory>
			<maxFileSize>30MB</maxFileSize>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
			<pattern>${LOG_PATTERN}</pattern>
		</encoder>
	</appender>

	<appender name="ASYNC_ERROR_APPENDER" class="ch.qos.logback.classic.AsyncAppender">
		<appender-ref ref="ERROR_APPENDER"/>
		<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
		<discardingThreshold>0</discardingThreshold>
		<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
		<queueSize>256</queueSize>
	</appender>

	<logger name="ERROR_LOG" level="INFO" additivity="false">
		<appender-ref ref="ASYNC_ERROR_APPENDER"/>
		<appender-ref ref="STDOUT"/>
	</logger>

	<!-- all_log-->
	<appender name="ALL_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>${LOG_HOME}/all.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<!--日志文件输出的文件名-->
			<FileNamePattern>${LOG_HOME}/all.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
			<!--日志文件保留天数-->
			<maxHistory>7</maxHistory>
			<maxFileSize>30MB</maxFileSize>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
			<pattern>${LOG_PATTERN}</pattern>
		</encoder>
	</appender>

	<appender name="ASYNC_ALL_APPENDER" class="ch.qos.logback.classic.AsyncAppender">
		<appender-ref ref="ALL_APPENDER"/>
		<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
		<discardingThreshold>0</discardingThreshold>
		<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
		<queueSize>256</queueSize>
	</appender>

	<logger name="com.yundong.third" level="INFO" additivity="false">
		<appender-ref ref="ASYNC_ALL_APPENDER"/>
		<appender-ref ref="STDOUT"/>
	</logger>

	<!-- 日志输出级别 -->
	<root level="INFO">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="ASYNC_ALL_APPENDER" />
	</root>

</configuration>