Logback日誌文件學習總結

Logback.xml配置學習總結

相關概念

  1. Logger:
    1. 日誌的記錄器
    2. 關聯到應用的對應的context
    3. 用於存放日誌對象
    4. 也可以定義日誌類型、級別
  2. appender
    1. 指定日誌輸出的目的地
      1. 控制檯
      2. 文件
      3. 遠程套接字服務器
      4. MySQL、PostreSQL、 Oracle和其他數據庫
      5. JMS和遠程UNIX Syslog守護進程等
  3. layout
    負責把事件轉換成字符串,格式化的日誌信息的輸出

配置文件詳解

整體結構圖

在這裏插入圖片描述

configuration

屬性

屬性名 默認值 作用
scan true 設置問true時候,將會被重新加載
scanPeriod 60 seconds 輪詢監控配置文件是否被修改的時間間隔,只有scan爲true的時候,纔會生效
debug false 當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
</configuration>

子節點

元素名 作用
contextName 用來設置上下文名稱,每個logger都關聯到logger上下文,默認上下文名稱爲default。但可以使用設置成其他名字,用於區分不同應用程序的記錄。一旦設置不能修改
property 用來定義變量值,它有兩個屬性name和value,通過定義的值會被插入到logger上下文中,可以使“${}”來使用變量。
timestamp 獲取時間戳字符串,他有兩個屬性key和datePattern,key: 標識此 的名字,datePattern: 設置將當前時間(解析配置文件的時間)轉換爲字符串的模式,遵循java.txt.SimpleDateFormat的格式。
appender 負責寫日誌的組件,它有兩個必要屬性name和class。name指定appender名稱,class指定appender的全限定名
logger 用來設置某一個包或具體的某一個類的日誌打印級別、以及指定。僅有一個name屬性,一個可選的level和一個可選的addtivity屬性。可以包含零個或多個元素,標識這個appender將會添加到這個logger,name: 用來指定受此logger約束的某一個包或者具體的某一個類。level: 用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,還有一個特俗值INHERITED或者同義詞NULL,代表強制執行上級的級別。 如果未設置此屬性,那麼當前loger將會繼承上級的級別。addtivity: 是否向上級loger傳遞打印信息。默認是true。同一樣,可以包含零個或多個元素,標識這個appender將會添加到這個loger。
root 同logger
  1. contextName For Example:

    <? xml version="1.0" encoding="UTF-8" ?>
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
    	<contextName>appid</contextName>
    </configuration>
    
  2. property For Example:

    <configuration scan="true" scanPeriod="60 seconds" debug="false"> 
       <property name="APP_Name" value="myAppName" /> 
       <contextName>${APP_Name}</contextName> 
       <!--其他配置省略--> 
    </configuration>
    
  3. timestamp For Example:

    configuration scan="true" scanPeriod="60 seconds" debug="false"> 
      <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/> 
      <contextName>${bySecond}</contextName> 
      <!-- 其他配置省略--> 
    </configuration>
    
  4. appender 獨立拿出來說

  5. logger

    1. 屬性

      • name: 用來指定受此loger約束的某一個包或者具體的某一個類
      • level: 用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,還有一個特俗值INHERITED或者同義詞NULL,代表強制執行上級的級別。 如果未設置此屬性,那麼當前loger將會繼承上級的級別。
    2. For Example

      <!-- 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-->
      <logger name="com.apache.ibatis" level="TRACE"/>
      <logger name="java.sql.Connection" level="DEBUG"/>
      <logger name="java.sql.Statement" level="DEBUG"/>
      <logger name="java.sql.PreparedStatement" level="DEBUG"/>
      
  6. root 同logger

    1. For Example

          <root level="debug">
              <appender-ref ref="DEBUG" />
          </root>
      

注意: 我這裏是這麼理解logger,root標籤,配置對應 level環境 比如說 debug 需要輸出到console和日誌文件裏面,線上的時候,只需要輸出到日誌文件裏面

appender

屬性

  1. name指定appender名稱
  2. class指定appender的全限定名

appender種類

類名 作用
ConsoleAppender 把日誌輸出到控制檯
FileAppender 把日誌添加到文件
RollingFileAppender 滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件時,將日誌記錄到其他文件
SocketAppender 待求證
SMTPAppender 待求證
DBAppender 待求證
SyslogAppender 待求證
SiftingAppender 待求證
自定義 待求證

注意: http://logback.qos.ch/documentation.html

ConsoleAppender

  1. 子元素

    元素名 默認值 作用
    encoder 對日誌進行格式化。(具體參數稍後講解 )
    target System.out 字符串System.out(默認)或者System.err(區別不多說了)
  2. for Example

    <configuration> 
       <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
          <encoder> 
             <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern> 
          </encoder> 
       </appender> 
    </configuration>
    

FileAppender

  1. 子元素

    元素名 默認值 作用
    file 沒有默認值 被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創建
    append true 爲true日誌被追加到文件結尾,如果是 false,清空現存文件
    encoder 對記錄事件進行格式化(單獨拿出來說)
    prudent false 爲true日誌會被安全的寫入文件,即使其他的FileAppender也在向此文件做寫入操作,效率低
  2. For Example

    <? xml version="1.0" encoding="UTF-8" ?>
    <configuration>
    	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    		<file>demo.log</file>
    		<append>true</append>
    		<encoder>%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)</encoder>
    		<prudent>false</prudent>
    	</appender>
    </configuration>
    

RollingFileAppender

  1. 子元素

    元素名 默認值 作用
    file 沒有默認值 被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創建
    append true true,日誌被追加到文件結尾,如果是 false,清空現存文件
    rollingPolicy 當發生滾動時,決定RollingFileAppender的行爲,涉及文件移動和重命名。屬性class定義具體的滾動策略類
  2. For Example

    <configuration> 
       <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
          <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
             <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern> 
             <maxHistory>30</maxHistory> 
          </rollingPolicy> 
          <encoder> 
             <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
          </encoder> 
       </appender> 
    
       <root level="DEBUG"> 
          <appender-ref ref="FILE" /> 
       </root> 
    </configuration>
    

rollingPolicy

  1. TimeBasedRollingPolicy:最常用的滾動策略,它根據時間來制定滾動策略,既負責滾動也負責出發滾動。

    元素 作用
    fileNamePattern 必要節點,包含文件名及“%d”轉換符,“%d”可以包含一個java.text.SimpleDateFormat指定的時間格式,如:%d{yyyy-MM}。如果直接使用 %d,默認格式是 yyyy-MM-dd。RollingFileAppender的file字節點可有可無,通過設置file,可以爲活動文件和歸檔文件指定不同位置,當前日誌總是記錄到file指定的文件(活動文件),活動文件的名字不會改變;如果沒設置file,活動文件的名字會根據fileNamePattern 的值,每隔一段時間改變一次。“/”或者“\”會被當做目錄分隔符。
    maxHistory 可選節點,控制保留的歸檔文件的最大數量,超出數量就刪除舊文件。假設設置每個月滾動,且maxHistory是6,則只保存最近6個月的文件,刪除之前的舊文件。注意,刪除舊文件是,那些爲了歸檔而創建的目錄也會被刪除。
 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
	<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
    <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern> 
    		<maxHistory>30</maxHistory> 
    </rollingPolicy> 
    <encoder> 
       <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
    </encoder> 
 </appender> 

備註:上述配置表示每天生成一個日誌文件,保存30天的日誌文件。 一天一份 報錯30份,所以就是30天

  1. SizeBasedTriggeringPolicy: 查看當前活動文件的大小,如果超過指定大小會告知RollingFileAppender 觸發當前活動文件滾動

    元素 作用
    maxFileSize 這是活動文件的大小,默認值是10MB。
    prudent 當爲true時,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有兩個限制,1不支持也不允許文件壓縮,2不能設置file屬性,必須留空。
  2. FixedWindowRollingPolicy: 根據固定窗口算法重命名文件的滾動策略
    疑問: 窗口大小的依據是什麼,是類似 tcp裏面的窗口?

    元素 作用
    minIndex 窗口索引最小值
    maxIndex 窗口索引最大值,當用戶指定的窗口過大時,會自動將窗口設置爲12。
    fileNamePattern 必須包含“%i”例如,假設最小值和最大值分別爲1和2,命名模式爲 mylog%i.log,會產生歸檔文件mylog1.log和mylog2.log。還可以指定文件壓縮選項,例如,mylog%i.log.gz 或者 沒有
  3. triggeringPolicy :告知 RollingFileAppender 合適激活滾動。

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
      <file>test.log</file> 

   <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 
       <fileNamePattern>tests.%i.log.zip</fileNamePattern> 
       <minIndex>1</minIndex> 
       <maxIndex>3</maxIndex> 
   </rollingPolicy> 

   <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
        <maxFileSize>5MB</maxFileSize> 
   </triggeringPolicy> 
   <encoder> 
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
   </encoder> 
</appender> 

自己手寫的一個配置文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章