Logback.xml配置學習總結
目錄:
相關概念
- Logger:
- 日誌的記錄器
- 關聯到應用的對應的context
- 用於存放日誌對象
- 也可以定義日誌類型、級別
- appender
- 指定日誌輸出的目的地
- 控制檯
- 文件
- 遠程套接字服務器
- MySQL、PostreSQL、 Oracle和其他數據庫
- JMS和遠程UNIX Syslog守護進程等
- 指定日誌輸出的目的地
- 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 |
-
contextName For Example:
<? xml version="1.0" encoding="UTF-8" ?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <contextName>appid</contextName> </configuration>
-
property For Example:
<configuration scan="true" scanPeriod="60 seconds" debug="false"> <property name="APP_Name" value="myAppName" /> <contextName>${APP_Name}</contextName> <!--其他配置省略--> </configuration>
-
timestamp For Example:
configuration scan="true" scanPeriod="60 seconds" debug="false"> <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/> <contextName>${bySecond}</contextName> <!-- 其他配置省略--> </configuration>
-
appender 獨立拿出來說
-
logger
-
屬性
- name: 用來指定受此loger約束的某一個包或者具體的某一個類
- level: 用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,還有一個特俗值INHERITED或者同義詞NULL,代表強制執行上級的級別。 如果未設置此屬性,那麼當前loger將會繼承上級的級別。
-
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"/>
-
-
root 同logger
-
For Example
<root level="debug"> <appender-ref ref="DEBUG" /> </root>
-
注意: 我這裏是這麼理解logger,root標籤,配置對應 level環境 比如說 debug 需要輸出到console和日誌文件裏面,線上的時候,只需要輸出到日誌文件裏面
appender
屬性
- name指定appender名稱
- class指定appender的全限定名
appender種類
類名 | 作用 |
---|---|
ConsoleAppender | 把日誌輸出到控制檯 |
FileAppender | 把日誌添加到文件 |
RollingFileAppender | 滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件時,將日誌記錄到其他文件 |
SocketAppender | 待求證 |
SMTPAppender | 待求證 |
DBAppender | 待求證 |
SyslogAppender | 待求證 |
SiftingAppender | 待求證 |
自定義 | 待求證 |
注意: http://logback.qos.ch/documentation.html
ConsoleAppender
-
子元素
元素名 默認值 作用 encoder 對日誌進行格式化。(具體參數稍後講解 ) target System.out 字符串System.out(默認)或者System.err(區別不多說了) -
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
-
子元素
元素名 默認值 作用 file 沒有默認值 被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創建 append true 爲true日誌被追加到文件結尾,如果是 false,清空現存文件 encoder 對記錄事件進行格式化(單獨拿出來說) prudent false 爲true日誌會被安全的寫入文件,即使其他的FileAppender也在向此文件做寫入操作,效率低 -
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
-
子元素
元素名 默認值 作用 file 沒有默認值 被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創建 append true true,日誌被追加到文件結尾,如果是 false,清空現存文件 rollingPolicy 當發生滾動時,決定RollingFileAppender的行爲,涉及文件移動和重命名。屬性class定義具體的滾動策略類 -
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
-
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天
-
SizeBasedTriggeringPolicy: 查看當前活動文件的大小,如果超過指定大小會告知RollingFileAppender 觸發當前活動文件滾動
元素 作用 maxFileSize 這是活動文件的大小,默認值是10MB。 prudent 當爲true時,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有兩個限制,1不支持也不允許文件壓縮,2不能設置file屬性,必須留空。 -
FixedWindowRollingPolicy: 根據固定窗口算法重命名文件的滾動策略
疑問: 窗口大小的依據是什麼,是類似 tcp裏面的窗口?元素 作用 minIndex 窗口索引最小值 maxIndex 窗口索引最大值,當用戶指定的窗口過大時,會自動將窗口設置爲12。 fileNamePattern 必須包含“%i”例如,假設最小值和最大值分別爲1和2,命名模式爲 mylog%i.log,會產生歸檔文件mylog1.log和mylog2.log。還可以指定文件壓縮選項,例如,mylog%i.log.gz 或者 沒有 -
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>