springBoot日誌篇

使用logback.xml進行配置(位置在項目resource下):

        一、xml文件總體架構:                      java

<?xml version="1.0" encoding="UTF-8"?>
<configuration >
<contextName></contextName>
<property name="" value="" />
<appender ></appender>
<root > </root>
<logger />
</configuration>mysql

     二、詳解:web

      <configuration >:參數spring

             一、scan:當此屬性設置爲true時,配置文件若是發生改變,將會被從新加載,默認值爲true                           二、 canPeriod:設置監測配置文件是否有修改的時間間隔,若是沒有給出時間單位,默認單位是毫                       秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘sql

             三、debug:當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默                   認值爲false數據庫

<configuration  scan="true" scanPeriod="60 seconds" debug="false">

  <contextName>:每一個logger都關聯到logger上下文,默認上下文名稱爲「default」。但可使用設置成其餘名字,用於區分不一樣應用程序的記錄。一旦設置,不能修改,能夠經過%contextName來打印日誌上下文名稱。apache

<contextName>spring-boot-logging</contextName>

  <property name="" value="" /> :用來定義變量值的標籤,有兩個屬性,name和value;其中name的值是變量的名稱,value的值時變量定義的值。經過定義的值會被插入到logger上下文中。定義變量後,可使「${}」來使用變量mybatis

<property name="log.path" value="d:/log" />

 <appender ></appender>:appender:用來格式化日誌輸出節點,有倆個屬性name和class,class用來指定哪一種輸出策略,經常使用就是控制檯輸出策略和文件輸出策略。架構

<!--輸出到控制檯-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <!-- 級別過濾 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

                    append屬性:併發

                                 name:該append的名字,在後面使用ref來匹配。(通常使用console或file,簡單明瞭)

                                 class: 用來指定哪一種輸出策略。通常有3種

                                      一、控制檯:class="ch.qos.logback.core.ConsoleAppender"             

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <!-- 級別過濾 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>               

               filter是一個過濾器,表示對輸出到控制檯的日記進行過濾。有兩種過濾器,分別爲LevelFilter 和ThresholdFilter。執行一個過濾器會有返回個枚舉值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日誌將當即被拋棄再也不                   通過其餘過濾器;返回NEUTRAL,有序列表裏的下個過濾器接着處理日誌;返回ACCEPT,日誌會被當即處理,再也不通過剩餘過濾器。

             LevelFilter 爲級別過濾器,根據日誌級別進行過濾。其下有三個子節點,level表示過濾的級別,用於配置符合過濾條件的操做,ACCEPT符合級別的輸出到控制檯,用於配置不符合過濾條件的操做,DENY不符合的拒絕輸出到控制檯。
             ThresholdFilter爲臨界值過濾器,過濾掉低於指定臨界值的日誌。當日志級別等於或高於臨界值時,過濾器返回NEUTRAL;當日志級別低於臨界值時,日誌會被拒絕。
           表示對日誌進行格式化
            %d{HH:mm:ss.SSS} :日誌的輸出時間
            %contextName : 上下文名稱
            %thread : 輸出日誌的進程名字,這在Web應用以及異步任務處理中頗有用
           %-5level : 日誌級別,而且使用5個字符靠左對齊
           %logger{36} : 日誌輸出者的名字(通常爲類名),名字最長36個字符,不然按照句點分割
          %msg : 具體的日誌消息
          %n :換行符

  

二、文件:class="ch.qos.logback.core.FileAppender"

<configuration>
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${log.path}/spring-boot-logging.log</file>
    <append>true</append>
    <encoder>
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
  </appender>
</configuration>

   

三、按照固定切分好比天天生成一個日誌文件class="ch.qos.logback.core.rolling.RollingFileAppender"

            

<!--輸出到文件-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/spring-boot-logging.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/spring-boot-logging.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
            <!-- 日誌保存週期 -->
            <maxHistory>30</maxHistory>
            <!-- 總大小 -->
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

常見的日誌輸出到文件,隨着應用的運行時間愈來愈長,日誌也會增加的愈來愈多,將他們輸出到同一個文件並不是一個好辦法。RollingFileAppender用於切分文件日誌。
其中file屬性定義文件的帶全路徑的文件名,重要的是rollingPolicy的定義。
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"是最經常使用的滾動策略,它根據時間來制定滾動策略,既負責滾動也負責觸發滾動
<fileNamePattern>${log.path}/spring-boot-logging.%d{yyyy-MMdd}.log.zip</fileNamePattern>定義了日誌的切分方式——把每一天的日誌歸檔到一個文件中,同理,可使用%d{yyyy-MM-dd HH-mm}來定義精確到分的日誌切分方式。
<maxHistory>30</maxHistory>表示只保留最近30天的日誌
<totalSizeCap>1GB</totalSizeCap>用來指定日誌文件的上限大小,例如設置爲1GB的話,那麼到了這個值,就會刪除舊的日誌

 

子節點loger
<loger>用來設置某一個包或者具體的某一個類的日誌打印級別、以及指定<appender>
<loger>僅有一個name屬性,一個可選的level和一個可選的addtivity屬性
name:用來指定受此loger約束的某一個包或者具體的某一個類。
level:用來設置打印級別,若是未設置此屬性,那麼當前loger將會繼承上級的級別。
addtivity:是否向上級loger傳遞打印信息。默認是true。
<loger> 的實際使用有兩種狀況
第一種是不指定level,不指定appender
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<logger name="com.baiding.logging.SpringBootLoggingApplicationTests"/>
這時候的處理流程是:當SpringBootLoggingApplicationTests執行日誌方法時,首先交給
<logger name="com.baiding.logging.SpringBootLoggingApplicationTests"/>
處理(繼承上級的level–info),將級別大於等於info的日誌交給root,自己沒有打印任何日誌

第二種是指定了level,指定了appender
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<!-- java中的包 -->
<logger name="com.baiding" level="warn" addtivity="false">
<appender-ref ref="console" />
</logger>
此logger指定了level爲warn,addtivity爲false,不在向上級傳遞打印信息,若設置了<appender-ref>屬性,但沒有設置addtivity爲false,則com.baiding包下的日誌會先在名爲console的appender記錄一次,以後傳遞給上級,root又會在名爲console和file的appender記錄一次,這樣就打印了兩次了。

SpringBoot在使用logback記錄日誌時,推薦使用logback-spring.xml的格式,這樣的話,日誌框架就不直接加載日誌的配置項,而是由SpringBoot解析日誌配置,就可使用SpringBoot 的高級Profile功能

以下logback-spring.xml

<springProfile name="dev">
<logger name="com.baiding" level="info"/>
</springProfile>

<springProfile name="prod">
<logger name="com.baiding" level="warn"/>
</springProfile>

能夠在不一樣的節點中使用springProfile功能,用於指定某段配置只在某個環境下生效 。固然使用前,要激活profile。
3、切換Log4j2框架
Spring Boot雖然默認使用Logback日誌框架,但其內部也集成了Log4j2框架。要知道的是,在Java中,Log4j2框架的性能是最強的,因此咱們通常在程序中使用Log4j2框架。下面介紹一下Log4j2的使用及其內部屬性的含義。
首先,要在Spring Boot使用Log4j2的話,那麼第一件事就是去除Logback的jar包,並引入Log4j2的jar。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
上面就是在依賴Web模塊的時候去除引用spring-boot-starter-logging.jar,以後依賴spring-boot-starter-log4j2.jar包。

以後在類路徑下新建一個log4j2.xml,其具體內容以下:
<?xml version="1.0" encoding="UTF-8"?>
<!--日誌級別以及優先級排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration後面的status,這個用於設置log4j2自身內部的信息輸出,能夠不設置,當設置成trace時,你會看到log4j2內部各類詳細輸出-->
<!--monitorInterval:Log4j可以自動檢測修改配置 文件和從新配置自己,設置間隔秒數-->
<configuration status="WARN" monitorInterval="30">

<Properties>
<Property name="log.path">log</Property>
</Properties>

<!--先定義全部的appender-->
<appenders>

<!--這個輸出控制檯的配置-->
<console name="Console" target="SYSTEM_OUT">
<!--輸出日誌的格式-->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>

<File name="log" fileName="${log.path}/test.log" append="false">
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</File>

<RollingFile name="RollingFileInfo" fileName="${log.path}/info.log"

filePattern="${log.path}/logs/${date:yyyy-MM}/info-%d{yyyy-MM-dd}.log.zip">

<!--只輸出level及以上級別的信息(onMatch),其餘的直接拒絕(onMismatch)-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>

<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>

<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
</Policies>

</RollingFile>
</appenders>

<!--而後定義logger,只有定義了logger並引入appender,appender纔會生效-->
<loggers>

<!--過濾掉spring和mybatis的一些無用的DEBUG信息-->
<logger name="org.springframework" level="INFO"/>
<logger name="org.mybatis" level="INFO"/>
<logger name="com.baiding" level="INFO"/>

<root level="info">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
</root>

</loggers>

</configuration>

1. 根節點屬性
根節點Configuration有兩個屬性,status和monitorinterval

status : status用來指定log4j2自己的日誌的級別
monitorinterval : monitorinterval用於指定log4j自動從新配置的監測間隔時間,單位是s,最小是5s
####2. Properties 標籤

在xml文件中,可使用Properties 標籤來自定義變量,方便其餘地方的引用。

<Properties>
<Property name="log.path">log</Property>
</Properties>

這裏的log.path是定義日誌存放的地方,此處是存放於項目根路徑下的log文件夾中
3.Appenders 節點
和logback同樣,Appender是用來定義日誌輸出點的,通常經常使用有三個子節點,分別爲Console、RollingFile、File。下面介紹一下各個子節點的用處及經常使用的屬性
Console節點用來定義輸出到控制檯的Appender:
name : 指定Appender的名字,用於Logger節點引用
target : SYSTEM_OUT 或 SYSTEM_ERR,通常設置爲:SYSTEM_OUT
PatternLayout : 指定日誌輸出格式,默認爲%m%n
<console name="Console" target="SYSTEM_OUT">
<!--輸出日誌的格式-->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>

File節點用來定義輸出到指定位置的文件的Appender:
name : 指定Appender的名字,用於Logger節點引用
fileName : 指定輸出日誌的目的文件帶全路徑的文件名
append : 是否追加,默認爲ture。ture是將新日誌追加到原日誌文件尾部,false則是刪除已有文件,重建新文件
PatternLayout : 指定日誌輸出格式,默認爲%m%n
<File name="log" fileName="log/test.log" append="false">
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</File>

RollingFile節點用來定義輸出到指定位置的文件的Appender,但其記錄的內容可拆分:
File對文件的約束很簡單,而RollingFile則比較靈活,其可根據文件大小來分拆,還能夠根據時間來分拆
name : 指定Appender的名字,用於Logger節點引用
fileName : 指定輸出日誌的目的文件帶全路徑的文件名
filePattern:指定拆分出去的日誌文件的全路徑的文件名以及格式
PatternLayout : 指定日誌輸出格式,默認爲%m%n
Policies : 指定滾動日誌的策略,就是何時進行新建日誌文件輸出日誌.
TimeBasedTriggeringPolicy : 基於時間進行日誌的滾動
SizeBasedTriggeringPolicy : 基於文件大小進行日誌的滾動
ThresholdFilter : 日誌過濾器
<RollingFile name="RollingFileInfo" fileName="${log.path}/info.log"
filePattern="${log.path}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.zip">

<!--只輸出level及以上級別的信息(onMatch),其餘的直接拒絕(onMismatch)-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>

<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>

<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
</Policies>

</RollingFile>

這裏說一下TimeBasedTriggeringPolicy這個滾動策略的屬性interval,它是指日誌進行滾動的間隔,那麼它的單位具體是什麼呢?關鍵點在於filePattern的日誌文件名所含有的日期格式%d{yyyy-MM-dd},這裏日期格式具體到了天,那麼以天爲單位,如果日期具體到%d{yyyy-MM-dd-HH-mm}分鐘的話,那麼就是以分鐘爲單位。

這裏還提到了日誌過濾器,Log4j提供了許多的日誌過濾器,具體能夠看下文檔 Filters。但咱們通常採用ThresholdFilter,這個過濾器通常用來過濾掉全部級別低於它定義的級別的日誌。

4.Loggers節點
Loggers節點下通常有root和logger節點.

root節點用來指定項目的根日誌,若是沒有單獨指定logger,那麼就會默認使用該root日誌輸出。

level :日誌輸出級別,共有8個級別,按照從低到高爲:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.
appender-ref :root的子節點,用來指定該日誌輸出到哪一個Appender
<root level="info">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
</root>

Logger節點用來單獨指定日誌的形式,好比要爲某個包下全部的class或者某個具體的class指定不一樣的日誌級別等。

level : 日誌輸出級別
name : 用來指定該Logger所適用的類或者包.
AppenderRef :Logger的子節點,用來指定該日誌輸出到哪一個Appender,若是沒有指定,就會默認繼承自Root
additivity :是否向上級傳遞日誌 true(默認)或false
<!--過濾掉spring和mybatis的一些無用的DEBUG信息-->
<logger name="org.springframework" level="INFO"/>
<logger name="org.mybatis" level="INFO"/>
<logger name="com.baiding" level="INFO"/>

若咱們爲logger指定了AppenderRef ,別忘了將logger的additivity 屬性設置爲false,要否則日誌可能會在指定的Appender中輸出兩遍
4、Log4j2異步輸出日誌
Log4j2有個突出的功能就是支持高效低延遲的異步化寫日誌。日誌異步輸出的好處在於,使用單獨的進程來執行日誌打印的功能,能夠提升日誌執行效率,減小日誌功能對正常業務的影響。
日誌的異步輸出使用了disruptor這個開源的併發框架,因此首先得導入disruptor.jar包
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.4.2</version>
</dependency>

異步輸出分爲兩種狀況,一種爲全異步模式,一種爲異步和非異步混合輸出模式。經過官方的性能對比,通常線程數在2-16之間的話,混合使用同步和異步的logger來打印日誌,性能是最好的。

異步和非異步混合模式
這種模式的啓用,主要在於兩個節點的使用,分別爲AsyncRoot和AsyncLogger,這兩個節點能夠和Root 或 Logger節點混合使用。
在這裏修改一下上述的log4j2.xml文件中Loggers節點就能夠了。
<loggers>
<AsyncRoot level="info">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
</AsyncRoot>
<AsyncLogger name="com.baiding" level="INFO" />
<AsyncLogger name="org.mybatis" level="INFO" />
<AsyncLogger name="org.springframework" level="INFO" />
</loggers>

 

下面是文正的xml代碼及註釋說明:

        

?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
    <!--定義日誌文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->
    <property name="LOG_NAME" value="/home"></property>
    <!-- %m輸出的信息,%p日誌級別,%t線程名,%d日期,%c類的全名,,,, -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--<pattern>%d %p (%file:%line\)- %m%n</pattern>-->
            <!--格式化輸出:%d:表示日期    %thread:表示線程名     %-5level:級別從左顯示5個字符寬度  %msg:日誌消息    %n:是換行符-->
            <pattern>1-%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n</pattern>
            <charset>GBK</charset>
        </encoder>
    </appender>
    <!--<include resource="org/springframework/boot/logging/logback/base.xml"/>-->
    <contextName>RestAPI</contextName>
    <property name="LOG_PATH" value=".logs"/>
    <!--設置系統日誌目錄-->
    <property name="APPDIR" value="app"/>
    <!--
          說明:
          一、日誌級別及文件
              日誌記錄採用分級記錄,級別與日誌文件名相對應,不一樣級別的日誌信息記錄到不一樣的日誌文件中
              例如:error級別記錄到log_error_xxx.log或log_error.log(該文件爲當前記錄的日誌文件),而log_error_xxx.log爲歸檔日誌,
              日誌文件按日期記錄,同一天內,若日誌文件大小等於或大於2M,則按0、一、2...順序分別命名
              例如log-level-2013-12-21.0.log
              其它級別的日誌也是如此。
          二、文件路徑
              若開發、測試用,在Eclipse中運行項目,則到Eclipse的安裝路徑查找logs文件夾,以相對路徑../logs。
              若部署到Tomcat下,則在Tomcat下的logs文件中
          三、Appender
              FILEERROR對應error級別,文件名以log-error-xxx.log形式命名
              FILEWARN對應warn級別,文件名以log-warn-xxx.log形式命名
              FILEINFO對應info級別,文件名以log-info-xxx.log形式命名
              FILEDEBUG對應debug級別,文件名以log-debug-xxx.log形式命名
              CONSOLE將日誌信息輸出到控制上,爲方便開發測試使用
       -->
    <!-- 日誌記錄器,日期滾動記錄 -->
    <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在記錄的日誌文件的路徑及文件名 -->
        <file>${LOG_PATH}/${APPDIR}/log_error.log</file>
        <!-- 日誌記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 歸檔的日誌文件的路徑,例現在天是2013-12-21日誌,當前寫的日誌文件路徑爲file節點指定,能夠將此文件與file指定文件路徑設置爲不一樣路徑,從而將當前日誌文件或歸檔日誌文件置不一樣的目錄。
            而2013-12-21的日誌文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
            <fileNamePattern>${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--壓縮日誌文件 -->
            <!--<fileNamePattern>${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.log.zip</fileNamePattern>-->
            <!--日誌文件保留天數30天 -->
            <maxHistory>30</maxHistory>
            <!-- 除按日誌記錄以外,還配置了日誌文件不能超過2M,若超過2M,日誌文件會以索引0開始,
            命名日誌文件,例如log-error-2013-12-21.0.log -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 追加方式記錄日誌 -->
        <append>true</append>
        <!-- 日誌文件的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日誌文件只記錄info級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
 
    <!-- 日誌記錄器,日期滾動記錄 -->
    <appender name="FILEWARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在記錄的日誌文件的路徑及文件名 -->
        <file>${LOG_PATH}/${APPDIR}/log_warn.log</file>
        <!-- 日誌記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 歸檔的日誌文件的路徑,例現在天是2013-12-21日誌,當前寫的日誌文件路徑爲file節點指定,能夠將此文件與file指定文件路徑設置爲不一樣路徑,從而將當前日誌文件或歸檔日誌文件置不一樣的目錄。
            而2013-12-21的日誌文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
            <fileNamePattern>${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 除按日誌記錄以外,還配置了日誌文件不能超過2M,若超過2M,日誌文件會以索引0開始,
            命名日誌文件,例如log-error-2013-12-21.0.log -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 追加方式記錄日誌 -->
        <append>true</append>
        <!-- 日誌文件的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日誌文件只記錄info級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
 
    <!-- 日誌記錄器,日期滾動記錄 -->
    <appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在記錄的日誌文件的路徑及文件名 -->
        <file>${LOG_PATH}/${APPDIR}/log_info.log</file>
        <!-- 日誌記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 歸檔的日誌文件的路徑,例現在天是2013-12-21日誌,當前寫的日誌文件路徑爲file節點指定,能夠將此文件與file指定文件路徑設置爲不一樣路徑,從而將當前日誌文件或歸檔日誌文件置不一樣的目錄。
            而2013-12-21的日誌文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
            <fileNamePattern>${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 除按日誌記錄以外,還配置了日誌文件不能超過2M,若超過2M,日誌文件會以索引0開始,
            命名日誌文件,例如log-error-2013-12-21.0.log -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 追加方式記錄日誌 -->
        <append>true</append>
        <!-- 日誌文件的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日誌文件只記錄info級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!--日誌異步到數據庫  -->
    <!--<appender name="DBAPPENDER" class="ch.qos.logback.classic.db.DBAppender">-->
    <!--<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">-->
    <!--<dataSource class="com.zaxxer.hikari.HikariDataSource">-->
    <!--<driverClassName>com.mysql.jdbc.Driver</driverClassName>-->
    <!--<jdbcUrl>jdbc:mysql://localhost:3306/albedo-new?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false</jdbcUrl>-->
    <!--<username>root</username>-->
    <!--<password>123456</password>-->
    <!--<poolName>HikariPool-logback</poolName>-->
    <!--</dataSource>-->
    <!--</connectionSource>-->
    <!--&lt;!&ndash; 此日誌文件只記錄info級別的 &ndash;&gt;-->
    <!--<filter class="ch.qos.logback.classic.filter.LevelFilter">-->
    <!--<level>warn</level>-->
    <!--<onMatch>ACCEPT</onMatch>-->
    <!--<onMismatch>DENY</onMismatch>-->
    <!--</filter>-->
    <!--&lt;!&ndash; 此日誌文件只記錄info級別的 &ndash;&gt;-->
    <!--<filter class="ch.qos.logback.classic.filter.LevelFilter">-->
    <!--<level>error</level>-->
    <!--<onMatch>ACCEPT</onMatch>-->
    <!--<onMismatch>DENY</onMismatch>-->
    <!--</filter>-->
    <!--</appender>-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern>
            <!--<charset>GBK</charset>-->
        </encoder>
    </appender>
    <logger name="com.minlia" level="DEBUG"/>
    <logger name="org.springframework.data.mybatis" level="DEBUG"/>
    <logger name="org.springframework.aop.aspectj" level="ERROR"/>
 
    <logger name="javax.activation" level="WARN"/>
    <logger name="javax.mail" level="WARN"/>
    <logger name="javax.xml.bind" level="WARN"/>
    <logger name="ch.qos.logback" level="INFO"/>
    <logger name="com.codahale.metrics" level="WARN"/>
    <logger name="com.ryantenney" level="WARN"/>
    <logger name="com.sun" level="WARN"/>
    <logger name="com.zaxxer" level="WARN"/>
    <logger name="io.undertow" level="WARN"/>
    <logger name="net.sf.ehcache" level="WARN"/>
    <logger name="org.apache" level="WARN"/>
    <logger name="org.apache.catalina.startup.DigesterFactory" level="OFF"/>
    <logger name="org.bson" level="WARN"/>
    <logger name="org.hibernate.validator" level="WARN"/>
    <logger name="org.hibernate" level="WARN"/>
    <logger name="org.hibernate.ejb.HibernatePersistence" level="OFF"/>
    <logger name="org.springframework.web" level="INFO"/>
    <logger name="org.springframework.security" level="WARN"/>
    <logger name="org.springframework.cache" level="WARN"/>
    <logger name="org.thymeleaf" level="WARN"/>
    <logger name="org.xnio" level="WARN"/>
    <logger name="springfox" level="WARN"/>
    <logger name="sun.rmi" level="WARN"/>
    <logger name="liquibase" level="WARN"/>
    <logger name="sun.rmi.transport" level="WARN"/>
 
    <logger name="jdbc.connection" level="ERROR"/>
    <logger name="jdbc.resultset" level="ERROR"/>
    <logger name="jdbc.resultsettable" level="INFO"/>
    <logger name="jdbc.audit" level="ERROR"/>
    <logger name="jdbc.sqltiming" level="ERROR"/>
    <logger name="jdbc.sqlonly" level="INFO"/>
 
    <!--<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">-->
    <!--<resetJUL>true</resetJUL>-->
    <!--</contextListener>-->
 
    <springProfile name="production">
        <root level="DEBUG">
            <!--<appender-ref ref="FILEERROR"/>-->
            <!--<appender-ref ref="FILEWARN"/>-->
            <!--<appender-ref ref="FILEINFO"/>-->
            <!--<appender-ref ref="DBAPPENDER"/>-->
            <appender-ref ref="STDOUT"/>
 
        </root>
    </springProfile>
 
 
    <springProfile name="dev">
        <root level="DEBUG">
            <!--<appender-ref ref="FILEERROR"/>-->
            <!--<appender-ref ref="FILEWARN"/>-->
            <!--<appender-ref ref="FILEINFO"/>-->
            <!--<appender-ref ref="DBAPPENDER"/>-->
            <appender-ref ref="CONSOLE"/>
 
        </root>
    </springProfile>
 
</configuration>
相關文章
相關標籤/搜索