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

<!--
debug：是否打印logback内部日志信息，默认值false，当设置为true表示打印，可实时查看logback运行状态，建议开启。
scan：配置发生改变时，是否重新加载，默认值true。由于配置文件都放在了JAR包中，而扫描的时候无法扫描JAR包内，
      因此会提示Empty watch file list. Disabling(没有可以检查的文件)，每隔一段时间就输出一次，所以配置false，第二种外置配置文件(略)。
scanPeriod：监测配置发生变化的时间间隔。默认值1分钟，如果没给出时间单位，默认时间单位是毫秒。单位：milliseconds, seconds, minutes or hours.
-->
<configuration debug="false" scan="false" scanPeriod="10 minutes">

    <!-- contextName：设置日志上下文名称，后面输出格式中可以通过定义 %contextName 来打印日志上下文名称 -->
    <contextName>logback</contextName>

    <!-- property：用来设置相关变量,通过key-value的方式配置，然后在后面的配置文件中通过 ${key}来访问 -->
    <!-- 定义日志的根目录 -->
    <property name="LOG_HOME" value="./logs"/>

    <!-- 定义日志文件名称，可引用${appName} -->
    <property name="appName" value="trade-client"/>

    <!-- 控制台彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="%white(%d{yyyy-MM-dd HH:mm:ss.SSS}) %highlight(%-5level) --- %green([%15.15thread]) %cyan(%-40.40logger{39}) : %magenta(%msg%n)"/>

    <!-- 普通文件的日志格式 -->
    <property name="FILE_LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%15.15thread]  %-40.40logger{39} : %msg%n"/>

    <!--
    appender——日志输出组件，主要负责日志的输出以及格式化日志，有name和class两个属性。常用的有ConsoleAppender和RollingFileAppender.
    name：无默认值，appender组件的名称，后面给logger指定appender使用。（name值忽视大小写）
    class：无默认值，appender的具体实现类，常用的有ConsoleAppender、FileAppender、RollingFileAppender.
    -->

    <!-- ConsoleAppender是向控制台输出日志事件的组件，一共有如下三个属性encoder、target、withJansi -->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--
        encoder：决定通过哪种方式将事件写入OutputStreamAppender，Encoder类型，默认使用ch.qos.logback.classic.encoder.PatternLayoutEncoder
        target：System.out 或 System.err，String类型，默认为 System.out.
        withJansi：boolean类型，默认为false，设置为true可以激活Jansi在windows使用ANSI彩色代码，但要导入jansi.jar.基于Unix实现的OS，像 Linux、Max OS X 都默认支持 ANSI 才彩色代码，故推荐设置为false.
        -->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <appender name="sys" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志文件名称 -->
        <file>${LOG_HOME}/${appName}/sys/sys.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${appName}/sys/sys.log.%d</fileNamePattern>
            <!--  <fileNamePattern>${LOG_HOME}/amazon/${appName}.log.%d</fileNamePattern>-->
            <!--日志文件保留天数-->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="thread" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${appName}/thread/thread.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${appName}/thread/thread.log.%d</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!--
    logger：
    -->

    <!-- 不同的业务逻辑日志打印到指定文件夹 -->
    <logger name="sysLog" additivity="false" level="INFO">
        <appender-ref ref="sys"/>
    </logger>
    <logger name="thread-log" additivity="false" level="INFO">
        <appender-ref ref="thread"/>
    </logger>

    <root level="info">
        <appender-ref ref="stdout"/>
    </root>

    <springProfile name="dev">
        <!-- configuration to be enabled when the "dev" profile is active -->
    </springProfile>

    <springProfile name="dev | test">
        <!-- configuration to be enabled when the "dev" or "test" profiles are active -->
    </springProfile>

    <springProfile name="!prod">
        <!-- configuration to be enabled when the "prod" profile is not active -->
    </springProfile>

</configuration>
