<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright (c) 2020 yifu4cloud 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="springAppName" source="spring.application.name" defaultValue=""/>
	<springProperty scop="context" name="springAppActive" source="spring.profiles.active" defaultValue=""/>
	<property name="log.path" value="logs/${springAppName}"/>
	<!-- 彩色日志格式 -->
	<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>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</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>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>ERROR</level>
		</filter>
	</appender>

	<!--nacos 心跳 INFO 屏蔽-->
	<logger name="com.alibaba.nacos" level="OFF">
		<appender-ref ref="error"/>
	</logger>

	<!--邮件提醒-->
	<appender name="MAIL" class="ch.qos.logback.classic.net.SMTPAppender">
		<smtpHost>smtp.exmail.qq.com</smtpHost>
		<smtpPort>465</smtpPort>
		<username>information@wanxin-holdings.com</username>
		<password>QmdCaQSPmCAQEddd</password>
		<SSL>true</SSL>
		<asynchronousSending>true</asynchronousSending>
		<to>wangpeng@wanxin-holdings.com,fangxinjiang@wanxin-holdings.com,hongguangwu@wanxin-holdings.com,huyuchen@wanxin-holdings.com</to>
		<from>information@wanxin-holdings.com</from>
		<subject>hro-mvp ${springAppActive}环境 ${springAppName}服务: %-20msg 错误</subject>
		<charsetEncoding>UTF-8</charsetEncoding>
		<cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
			<!-- &lt;!&ndash; 每个电子邮件只发送一个日志条目 &ndash;&gt;-->
			<bufferSize>1</bufferSize>
		</cyclicBufferTracker>
		<layout class="ch.qos.logback.classic.html.HTMLLayout"/>
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>ERROR</level>
		</filter>
	</appender>

	<springProfile name="prd">
		<root level="error">
			<appender-ref ref="console"/>
			<appender-ref ref="debug"/>
			<appender-ref ref="error"/>
			<appender-ref ref="MAIL"/>
		</root>
	</springProfile>
	<springProfile name="dev">
		<root level="error">
			<appender-ref ref="console"/>
			<appender-ref ref="debug"/>
			<appender-ref ref="error"/>
		</root>
	</springProfile>
	<springProfile name="test">
		<!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 -->
		<root level="debug">
			<appender-ref ref="console"/>
			<appender-ref ref="debug"/>
			<appender-ref ref="error"/>
		</root>
	</springProfile>
</configuration>
