logback使用

1.須要添加的包 java

logback-classic-1.1.3.jar
logback-core-1.1.3.jar
slf4j-api-1.7.12.jar web

2.關於配置文件讀取 正則表達式

 系統啓動,默認加載在classpath下的logback.xml 或者 logback-test.xml和 logback.groovy 文件, api

通常咱們只要在classpath下添加logback.xml文件 數組

3.關於日誌建立 安全

import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Test { private static final Logger LOGGER = LoggerFactory.getLogger(Test.class); public void logOutPut(){ MDC.put("ip", "192.168.1.1"); LOGGER.debug("hello word"); MDC.remove("ip"); } public static void main(String[] args) { Test t = new Test(); t.logOutPut(); } }




4.logback.xml詳解

文檔結構: app

<configuration>
    <contextName></contextName>
    <property/> 
    <timestamp></timestamp>
    <appender>...</appender>
    <logger> ...</logger>
    <root>...</root>
</configuration>

4.1設置根節點

start: configuration

<configuration scan="true" scanPeriod="60 seconds" debug="false">...</configuration >
scan 當此屬性設置爲true時,配置文件若是發生改變,將會被從新加載,默認值爲true。

scanPeriod 設置監測配置文件是否有修改的時間間隔,若是沒有給出時間單位(milliseconds、seconds、minutes和hours),默認單位是毫秒(milliseconds)。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘。
性能

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

end: configuration spa


4.2 設置上下文名稱

start:contextName

<contextName>mylogConfig</contextName>
每一個logger都關聯到logger上下文,默認上下文名稱爲「default」。但可使用<contextName>設置成其餘名字,用於區分不一樣應用程序的記錄。一旦設置,不能修改。

end:contextName


4.3 設置變量

start:property

<configuration>
      <property name="LogConfig" value="mylogConfig" />
      <contextName>${LogConfig}</contextName> 
</configuration>

用來定義變量值的標籤,經過<property>定義的值會被插入到logger上下文中。定義變量後,可使「${}」來使用變量。

name : 變量的名稱

value : 變量定義的值

end:property


4.4 獲取時間戳字符串

start:timestamp

<timestamp key="date" datePattern="yyyy-MM-dd"/>
key : 標識名字

datePattern : 設置將當前時間(解析配置文件的時間)轉換爲字符串的模式,遵循java.txt.SimpleDateFormat的格式。

end:timestamp


4.5 全部日誌器的總的設置 root

start:root

<root level="error">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE-AUDIT" />
</root>

<root>也是<loger>元素,可是它是根loger

level : 設置全部日誌的輸出級別

<appender-ref>:設置全部日誌的apender

end:root


4.6 個別日誌器的個性化設置 logger

start:logger

<logger name="com.mkyong.web" level="debug" additivity="false">
     <appender-ref ref="STDOUT" />
     <appender-ref ref="FILE-AUDIT" />
 </logger>
用來設置某一個或者具體的某一個下的日誌的打印級別、以及爲其指定<appender>。

name : 能夠是某一級的包名,也能夠是一個完整的類名。必要

level : 打印級別,若是不指定默認爲root中的打印級別

additivity : 是否向上級loger傳遞打印信息。默認是true

<appender-ref> : 日誌輸出設置,能夠爲logger其指定多個appender。若是不指定默認爲root的appender

end:logger


4.7 設置日誌輸出方式appender

star:appender

總的結構(只是列出些經常使用的)

<appender>
	<target></target>
	<encoder></encoder>
	<filter></filter>
	<file>文件輸出-指定的文件路徑</file>
	<append>文件輸出-是否向舊的日誌追加新內容</append>
	<rollingPolicy>文件輸出-文件滾動策略</rollingPolicy>
	<prudent>文件輸出—</prudent>
	<triggeringPolicy>文件輸出-激活滾動</triggeringPolicy>
</appender>

例1(控制檯輸出,根據須要分別打印不一樣級別的日誌消息):

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<target>System.out</target>
		<encoder>
		   <Pattern>
			%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} -%msg%n
		   </Pattern>
		   <charset>utf-8</charset>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
		   <level>error</level>
		   <onMatch>DENY</onMatch>
		   <onMismatch>ACCEPT</onMismatch>
		</filter>
	</appender>

	<appender name="STDOUT_ERROR" class="ch.qos.logback.core.ConsoleAppender">
		<target>System.err</target>
		<encoder>
		   <Pattern>
			%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
		   </Pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
		   <level>error</level>
		   <onMatch>ACCEPT</onMatch>
		   <onMismatch>DENY</onMismatch>
		</filter>
	</appender>

例2(追加的方式輸出到文件,只有一個日誌文件,全部的日誌消息將一直追加到指定的文件後面):

<appender name="FILE-AUDIT_APPEND" class="ch.qos.logback.core.FileAppender">
    <file>F:/log/test/logback.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
	<Pattern>
	   %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
	</Pattern>
    </encoder>
    <append>true</append>
</appender>


例3 (滾動方式輸出到文件。下面的設置將一天產生一個日誌,若是當天日誌超過10M將進行再分割)

<appender name="FILE-ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>F:/log/test/today.log</file> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </Pattern> <charset>utf-8</charset> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- rollover daily --> <fileNamePattern>F:/log/test/%d.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> </appender>

1. <appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">...</appender>
name : appender的標識名稱

class : 指定日誌輸出方案的具體實現類。(如下是官方提供的幾種方案)

  • ch.qos.logback.core.ConsoleAppender                   //輸出到控制檯
  • ch.qos.logback.core.FileAppender                         //輸出到文件
  • ch.qos.logback.core.rolling.RollingFileAppender    //以滾動方式輸出到文件


2.<target>:當爲控制檯輸出時可爲其指定 System.out 或者 System.err,默認 System.out 

3.<filter>:設置輸出時過濾策略

4.<file>:當爲文件輸出時,爲其指定文件路徑。能夠是絕對,也能夠是相對,若是上級目錄不存在會自動建立,沒有默認值。

5.<append>:當爲文件輸出時,是否向舊的日誌追加新內容,默認true,當是滾動輸出日誌文件時該屬性將會被託 管(設置了也不生效),且值爲true

6.<rollingPolicy>:當發生滾動時,決定 RollingFileAppender 的行爲,涉及文件移動和重命名。

7. <prudent> :若是是 true,日誌會被安全的寫入文件,即便其餘的FileAppender也在向此文件作寫入操做,效率低,默認是 false

8.<triggeringPolicy> :  告知 RollingFileAppender 合適激活滾動。

9.<encoder>:

<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </Pattern> <charset>utf-8</charset> </encoder>

負責兩件事,一是把日誌信息轉換成字節數組,二是把字節數組寫入到輸出流目前PatternLayoutEncoder 是惟一有用的且默認的encoder ,使用「%」加「轉換符」方式,若是要輸出「%」,則必須用「\」對「\%」進行轉義。(爲了兼容舊的版本在此版本下仍是支持使用<layout>節點設置輸出格式,但爲了升級的考慮不推薦使用)

轉換符:

1. 輸出日誌的logger名

%c {length } 
%lo {length } 
%logger {length } 

2.輸出上下文名稱。

%contextName 
%cn

3.輸出當前日期,模式語法與java.text.SimpleDateFormat 兼容

%d {pattern } 
%date {pattern }

4.輸出應用程序提供的信息

%m
%msg
%message

5.輸出平臺先關的分行符「\n」或者「\r\n」。

%n

6.輸出日誌級別。

%p
%le
%level

7.輸出產生日誌的線程名。

%t
%thread

8.輸出從程序啓動到建立日誌記錄的時間,單位是毫秒

%r
%relative

9.p 爲日誌內容,r 是正則表達式,將p 中符合r 的內容替換爲t 。

%replace(p ){r, t}    例:  %replace(%msg){'\s', '' }

10.輸出MDC值

%X{keyName}   例: %X{ip}   --->   192.168.1.1         (java代碼見3)

11.以及其餘可能會影響性能的轉換符

%L 或  %line                                            輸出執行日誌請求的行號。儘可能避免使用
%M 或 %method                                      輸出執行日誌請求的方法名。儘可能避免使用
%F 或 %file                                              輸出執行記錄請求的java源文件名。儘可能避免使用
%C {length } 或 %class {length }                輸出執行記錄請求的調用者的全限定名。儘可能避免使用
%caller{depth}caller{depth, evaluator-1, ... evaluator-n}   輸出生成日誌的調用者的位置信息,整數選項表示輸出信息深度。

12.格式修飾符,與轉換符共同使用:
可選的格式修飾符位於「%」和轉換符之間。
第一個可選修飾符是左對齊 標誌,符號是減號「-」;接着是可選的最小寬度 修飾符,用十進制數表示。若是字符小於最小寬度,則左填充或右填充,默認是左填充(即右對齊),填充符爲空格。若是字符大於最小寬度,字符永遠不會被截斷。最大寬度 修飾符,符號是點號"."後面加十進制數。若是字符大於最大寬度,則從前面截斷。點符號「.」後面加減號「-」在加數字,表示從尾部截斷。

end:appender

一些經常使用的配置:見《logback經常使用配置》

ps: 以前我一直再找logback.xml的dtd,或schema,可是沒找到,緣由是這裏的節點名稱是其使用類的屬性。例:若是你要想看 <encoder class='PatternLayoutEncoder'>  這個節點下的配置方案,那你能夠去查看PatternLayoutEncoder這類的api,看其有什麼屬性能夠設置的,其屬性名便是節點名。

參考:http://blog.csdn.net/haidage/article/details/6794529

相關文章
相關標籤/搜索