<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" >
   <property name="logTextPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %X{username} %-5level %logger{80} [%L] - %msg%n"/>
   <property name="logFileBase" value="/home"/>
      <!-- 子节点<appender>:负责写日志的组件,它有两个必要属性name和class。name指定appender名称,class指定appender的全限定名 --> 
   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
      <Encoding>GBK</Encoding>
      <layout class="ch.qos.logback.classic.PatternLayout">
         <pattern>${logTextPattern}</pattern>
      </layout>
   </appender>

      <!-- 按照每天生成日志文件 RollingFileAppender滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。有以下子节点:-->   
    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
       <file>${logFileBase}/myApp.log</file>
        <Encoding>UTF-8</Encoding>
        <!-- 按照每天生成日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${logFileBase}/logFile.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!-- 保存30天的日志文件 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <!-- <layout class="ch.qos.logback.classic.PatternLayout">
            格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
       </layout> -->
        <!--日志文件大小超限后,回滚,压缩日志文件-->
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 
         <fileNamePattern>${logFileBase}/myApp.%i.log.zip</fileNamePattern>
           <!-- 按照固定窗口模式生成日志文件 窗口大小是1到20,当保存了20个归档文件后,将覆盖最早的日志。-->
           <minIndex>1</minIndex> 
           <maxIndex>20</maxIndex> 
      </rollingPolicy> 

      <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
         <MaxFileSize>51200KB</MaxFileSize>
      </triggeringPolicy>
      <layout class="ch.qos.logback.classic.PatternLayout">
         <pattern>${logTextPattern}</pattern>
      </layout>
    </appender>
      <!-- 子节点<logger>:用来设置某一个包或具体的某一个类的日志打印级别、以及指定<appender>。
      <logger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。
      可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger
      name: 用来指定受此logger约束的某一个包或者具体的某一个类。
      level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,
      还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前logger将会继承上级的级别。
      addtivity: 是否向上级loger传递打印信息。默认是true。同<logger>一样,可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger。 -->

      <!-- show parameters for Hibernate sql 专为 Hibernate 定制 -->
   <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
   <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
   <logger name="org.hibernate.SQL" level="DEBUG" />
   <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
   <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />



   <!--MyiBatis log configure-->   <!--现发现此处并不能控制SQL的打印-->
   <logger name="java.sql.Connection" level="INFO" />
   <logger name="java.sql.Statement" level="INFO" />
   <logger name="java.sql.PreparedStatement" level="INFO" />

   <logger name="com.plan.souler" level="DEBUG" />  <!--这里的级别 控制一切-->

   <logger name="com.plan.souler.service.impl.LoginServiceImpl" level="INFO" />
   <logger name="com.plan.souler.controller.LoginAction" level="INFO" />
   <logger name="com.plan.souler.**.dao.*Dao" level="DEBUG" />
   <logger name="com.plan.souler.**.dao.*Mapper" level="DEBUG" />
   <logger name="sqlMap" level="DEBUG" />

   <!--下层路径或具体类 配置的日志级别  低于 上层路径的日志级别时  决定者为 上层
   下层路径或具体类 配置的日志级别  高于 上层路径的日志级别时  决定者为 下层-->


      <!-- 日志输出级别 TRACE < DEBUG < INFO < WARN < ERROR-->
      <!--现发现此处可以控制SQL的打印-->
    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

</configuration>