<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright (c) 2021 sky4cloud Authors. All Rights Reserved.
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<configuration debug="false" scan="false">
	<springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/>
	<property name="log.path" value="logs/${spring.application.name}"/>
	<!-- 彩色日志格式 -->
	<property name="CONSOLE_LOG_PATTERN"
			  value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%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>
		</encoder>
	</appender>

	<!-- Log file debug output -->
	<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}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
			<maxFileSize>50MB</maxFileSize>
			<maxHistory>30</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
		</encoder>
	</appender>

	<!-- Log file error output -->
	<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}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
			<maxFileSize>50MB</maxFileSize>
			<maxHistory>30</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>ERROR</level>
		</filter>
	</appender>
	<appender name="aliyun" class="com.aliyun.openservices.log.logback.LoghubAppender">
		<!-- Configure account and network  -->
		<endpoint>cn-chengdu.log.aliyuncs.com</endpoint>
		<!-- 填写sls key密钥 -->
		<accessKeyId>LTAI5tLsj8MPeZgqiR3omZtk</accessKeyId>
		<accessKeySecret>Dj710GX7H4KHEfopzboT1g57a7RGTH</accessKeySecret>

		<project>kxs-logs</project>
		<!--logStore名称 -->
		<logStore>kxs-store</logStore>

		<!-- Optional parameters -->
		<!-- 主题名称 -->
		<topic>${spring.application.name}</topic>
		<!--		#单个 producer 实例能缓存的日志大小上限，默认为 100MB。-->
		<totalSizeInBytes>104857600</totalSizeInBytes>
		<maxBlockMs>0</maxBlockMs>
		<!--		执行日志发送任务的线程池大小，默认为可用处理器个数。-->
		<ioThreadCount>8</ioThreadCount>
		<batchSizeThresholdInBytes>524288</batchSizeThresholdInBytes>
		<batchCountThreshold>4096</batchCountThreshold>
		<lingerMs>2000</lingerMs>
		<retries>10</retries>
		<baseRetryBackoffMs>100</baseRetryBackoffMs>
		<maxRetryBackoffMs>50000</maxRetryBackoffMs>

		<!-- 可选项 通过配置 encoder 的 pattern 自定义 log 的格式 -->
		<encoder>
			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
		</encoder>

		<!--  Optional parameters -->
		<timeFormat>yyyy-MM-dd'T'HH:mmZ</timeFormat>
		<!-- 可选项 设置时区 -->
		<timeZone>Asia/Shanghai</timeZone>
		<mdcFields>
			TraceId,#####
		</mdcFields>
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>ERROR</level>
			<level>INFO</level>
		</filter>

		<!-- 屏蔽transfer模块 -->
		<logger name="com.kxs.transfer.api" level="OFF"/>

	</appender>
	<!--为了防止进程退出时，内存中的数据丢失，请加上此选项-->
	<shutdownHook class="ch.qos.logback.core.hook.DefaultShutdownHook"/>
	<!-- 可用来获取StatusManager中的状态 -->
	<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/>

	<!-- 解决debug模式下循环发送的问题 -->
	<logger name="org.apache.http.impl.conn.Wire" level="WARN" />

	<!-- 引入sls日志 -->
	<springProfile name="dev">
		<root level="INFO">
			<appender-ref ref="console"/>
		</root>
	</springProfile>

	<!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 -->

	<springProfile name="test">
		<root level="INFO">
			<appender-ref ref="console"/>
			<appender-ref ref="debug"/>
			<appender-ref ref="error"/>
		</root>
	</springProfile>
	<springProfile name="prod">
		<root level="INFO">
			<appender-ref ref="console"/>
			<appender-ref ref="aliyun" />
		</root>
	</springProfile>

</configuration>
