一.簡介

log4j2相對於log4j 1.x有了脫胎換骨的變化,其官網宣稱的優勢有多執行緒下10幾倍於log4j 1.x和logback的高吞吐量、可配置的審計型日誌、基於外掛架構的各種靈活配置等。如果已經掌握log4j 1.x,使用log4j2還是非常簡單的。

二.maven依賴

<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.8.2</version>
</dependency>

三.基本資訊

1.關於配置檔案的名稱以及在專案中的存放位置

    log4j 2.x版本不再支援像1.x中的.properties字尾的檔案配置方式,2.x版本配置檔案字尾名只能為".xml",".json"或者".jsn".

    系統選擇配置檔案的優先順序(從先到後)如下:

      (1).classpath下的名為log4j2-test.json 或者log4j2-test.jsn的檔案.

      (2).classpath下的名為log4j2-test.xml的檔案.

      (3).classpath下名為log4j2.json 或者log4j2.jsn的檔案.

      (4).classpath下名為log4j2.xml的檔案.

     我們一般預設使用log4j2.xml進行命名。如果本地要測試,可以把log4j2-test.xml放到classpath,而正式環境使用log4j2.xml,則在打包部署的時候不要打包log4j2-test.xml即可。

2.預設預設配置檔案

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <Configuration status="WARN">
3 <Appenders>
4 <Console name="Console" target="SYSTEM_OUT">
5 <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
6 </Console>
7 </Appenders>
8 <Loggers>
9 <Root level="error">
10 <AppenderRef ref="Console"/>
11 </Root>
12 </Loggers>
13 </Configuration>

3.配置檔案節點解析

(1).根節點Configuration有兩個屬性:status和monitorinterval,有兩個子節點:Appenders和Loggers(表明可以定義多個Appender和Logger).

 status用來指定log4j本身的列印日誌的級別.

 monitorinterval用於指定log4j自動重新配置的監測間隔時間,單位是s,最小是5s.

(2).Appenders節點,常見的有三種子節點:Console、RollingFile、File.

 Console節點用來定義輸出到控制檯的Appender.

 name:指定Appender的名字.

 target:SYSTEM_OUT 或 SYSTEM_ERR,一般只設置預設:SYSTEM_OUT.

 PatternLayout:輸出格式,不設定預設為:%m%n.

 File節點用來定義輸出到指定位置的檔案的Appender.

 name:指定Appender的名字.

 fileName:指定輸出日誌的目的檔案帶全路徑的檔名.

 PatternLayout:輸出格式,不設定預設為:%m%n.

 RollingFile節點用來定義超過指定大小自動刪除舊的建立新的的Appender.

 name:指定Appender的名字.

 fileName:指定輸出日誌的目的檔案帶全路徑的檔名.

 PatternLayout:輸出格式,不設定預設為:%m%n.

 filePattern:指定新建日誌檔案的名稱格式.

 Policies:指定滾動日誌的策略,就是什麼時候進行新建日誌檔案輸出日誌.

 TimeBasedTriggeringPolicy:Policies子節點,基於時間的滾動策略,interval屬性用來指定多久滾動一次,預設是1 hour。modulate=true用來調整時間:比如現在是早上3am,interval是4,那麼第一次滾動是在4am,接著是8am,12am...而不是7am.

 SizeBasedTriggeringPolicy:Policies子節點,基於指定檔案大小的滾動策略,size屬性用來定義每個日誌檔案的大小.

 DefaultRolloverStrategy:用來指定同一個資料夾下最多有幾個日誌檔案時開始刪除最舊的,建立新的(通過max屬性)。

 (3).Loggers節點,常見的有兩種:Root和Logger.

 Root節點用來指定專案的根日誌,如果沒有單獨指定Logger,那麼就會預設使用該Root日誌輸出

 level:日誌輸出級別,共有8個級別,按照從低到高為:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.

 AppenderRef:Root的子節點,用來指定該日誌輸出到哪個Appender.

 Logger節點用來單獨指定日誌的形式,比如要為指定包下的class指定不同的日誌級別等。

 level:日誌輸出級別,共有8個級別,按照從低到高為:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.

 name:用來指定該Logger所適用的類或者類所在的包全路徑,繼承自Root節點.

 AppenderRef:Logger的子節點,用來指定該日誌輸出到哪個Appender,如果沒有指定,就會預設繼承自Root.如果指定了,那麼會在指定的這個Appender和Root的Appender中都   會輸出,此時我們可以設定Logger的additivity="false"只在自定義的Appender中進行輸出。

 (4).關於日誌level.

  共有8個級別,按照從低到高為:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.

  All:最低等級的,用於開啟所有日誌記錄.

  Trace:是追蹤,就是程式推進以下,你就可以寫個trace輸出,所以trace應該會特別多,不過沒關係,我們可以設定最低日誌級別不讓他輸出.

  Debug:指出細粒度資訊事件對除錯應用程式是非常有幫助的.

  Info:訊息在粗粒度級別上突出強調應用程式的執行過程.

  Warn:輸出警告及warn以下級別的日誌.

  Error:輸出錯誤資訊日誌.

  Fatal:輸出每個嚴重的錯誤事件將會導致應用程式的退出的日誌.

  OFF:最高等級的,用於關閉所有日誌記錄.

  程式會列印高於或等於所設定級別的日誌,設定的日誌等級越高,打印出來的日誌就越少

 四.比較完整的log4j2.xml配置模板  

1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--日誌級別以及優先順序排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
3 <!--Configuration後面的status,這個用於設定log4j2自身內部的資訊輸出,可以不設定,當設定成trace時,你會看到log4j2內部各種詳細輸出-->
4 <!--monitorInterval:Log4j能夠自動檢測修改配置 檔案和重新配置本身,設定間隔秒數-->
5 <configuration status="WARN" monitorInterval="30">
6 <!--先定義所有的appender-->
7 <appenders>
8 <!--這個輸出控制檯的配置-->
9 <console name="Console" target="SYSTEM_OUT">
10 <!--輸出日誌的格式-->
11 <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
12 </console>
13 <!--檔案會打印出所有資訊,這個log每次執行程式會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用-->
14 <File name="log" fileName="log/test.log" append="false">
15 <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
16 </File>
17 <!-- 這個會打印出所有的info及以下級別的資訊,每次大小超過size,則這size大小的日誌會自動存入按年份-月份建立的資料夾下面並進行壓縮,作為存檔-->
18 <RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log"
19 filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
20 <!--控制檯只輸出level及以上級別的資訊(onMatch),其他的直接拒絕(onMismatch)-->
21 <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
22 <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
23 <Policies>
24 <TimeBasedTriggeringPolicy/>
25 <SizeBasedTriggeringPolicy size="100 MB"/>
26 </Policies>
27 </RollingFile>
28 <RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log"
29 filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
30 <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
31 <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
32 <Policies>
33 <TimeBasedTriggeringPolicy/>
34 <SizeBasedTriggeringPolicy size="100 MB"/>
35 </Policies>
36 <!-- DefaultRolloverStrategy屬性如不設定,則預設為最多同一資料夾下7個檔案,這裡設定了20 -->
37 <DefaultRolloverStrategy max="20"/>
38 </RollingFile>
39 <RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/error.log"
40 filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
41 <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
42 <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
43 <Policies>
44 <TimeBasedTriggeringPolicy/>
45 <SizeBasedTriggeringPolicy size="100 MB"/>
46 </Policies>
47 </RollingFile>
48 </appenders>
49 <!--然後定義logger,只有定義了logger並引入的appender,appender才會生效-->
50 <loggers>
51 <!--過濾掉spring和mybatis的一些無用的DEBUG資訊-->
52 <logger name="org.springframework" level="INFO"></logger>
53 <logger name="org.mybatis" level="INFO"></logger>
54 <root level="all">
55 <appender-ref ref="Console"/>
56 <appender-ref ref="RollingFileInfo"/>
57 <appender-ref ref="RollingFileWarn"/>
58 <appender-ref ref="RollingFileError"/>
59 </root>
60 </loggers>
61 </configuration>

 五.日誌呼叫

package com.my.study;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; public class UseLog4j2 { private static Logger logger = LogManager.getLogger(UseLog4j2.class);
public static void main(String[] args) {
// TODO Auto-generated method stub
logger.info("33333");
} }

六.配置詳解

Log4j2的日誌配置檔案,log4j2.xml檔案的配置(實現控制檯輸出,各級別分別檔案輸出,自動壓縮等)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/2002/xmlspec/dtd/2.10/xmlspec.dtd"> <!-- status : 這個用於設定log4j2自身內部的資訊輸出,可以不設定,當設定成trace時,會看到log4j2內部各種詳細輸出 monitorInterval
: Log4j能夠自動檢測修改配置檔案和重新配置本身, 設定間隔秒數。 注:本配置檔案的目標是將不同級別的日誌輸出到不同檔案,最大2MB一個檔案,
檔案資料達到最大值時,舊資料會被壓縮並放進指定資料夾 -->
<Configuration status="WARN" monitorInterval="600"> <Properties> <!-- 配置日誌檔案輸出目錄,此配置將日誌輸出到tomcat根目錄下的指定資料夾 -->
<Property name="LOG_HOME">${sys:catalina.home}/WebAppLogs/HHServices
</Property>
</Properties> <Appenders> <!-- 優先順序從高到低分別是 OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL -->
<!-- 單詞解釋: Match:匹配 DENY:拒絕 Mismatch:不匹配 ACCEPT:接受 -->
<!-- DENY,日誌將立即被拋棄不再經過其他過濾器; NEUTRAL,有序列表裡的下個過濾器過接著處理日誌; ACCEPT,日誌會被立即處理,不再經過剩餘過濾器。 -->
<!--輸出日誌的格式
%d{yyyy-MM-dd HH:mm:ss, SSS} : 日誌生產時間
%p : 日誌輸出格式
%c : logger的名稱
%m : 日誌內容,即 logger.info("message")
%n : 換行符
%C : Java類名
%L : 日誌輸出所在行數
%M : 日誌輸出所在方法名
hostName : 本地機器名
hostAddress : 本地ip地址 --> <!--這個輸出控制檯的配置,這裡輸出除了warn和error級別的資訊到System.out -->
<Console name="console_out_appender" target="SYSTEM_OUT">
<!-- 控制檯只輸出level及以上級別的資訊(onMatch),其他的直接拒絕(onMismatch) . -->
<ThresholdFilter level="DEBUG" onMatch="ACCEPT"
onMismatch="DENY" />
<!-- 輸出日誌的格式 -->
<PatternLayout pattern="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n" />
</Console>
<!-- 這個輸出控制檯的配置,這裡輸出error級別的資訊到System.err,在eclipse控制檯上看到的是紅色文字 -->
<Console name="console_err_appender" target="SYSTEM_ERR">
<ThresholdFilter level="ERROR" onMatch="ACCEPT"
onMismatch="DENY" />
<PatternLayout pattern="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n" />
</Console> <!-- TRACE級別日誌 ; 設定日誌格式並配置日誌壓縮格式,壓縮檔案獨立放在一個資料夾內, 日期格式不能為冒號,否則無法生成,因為檔名不允許有冒號,此appender只輸出trace級別的資料到trace.log -->
<RollingFile name="trace_appender" immediateFlush="true"
fileName="${LOG_HOME}/trace.log" filePattern="${LOG_HOME}/trace/trace - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
<PatternLayout>
<pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
</PatternLayout>
<Policies>
<!-- 每個日誌檔案最大2MB -->
<SizeBasedTriggeringPolicy size="2MB" /> </Policies>
<Filters>
<!-- 此Filter意思是,只輸出TRACE級別的資料 DENY,日誌將立即被拋棄不再經過其他過濾器; NEUTRAL,有序列表裡的下個過濾器過接著處理日誌;
ACCEPT,日誌會被立即處理,不再經過剩餘過濾器。 -->
<ThresholdFilter level="debug" onMatch="DENY"
onMismatch="NEUTRAL" />
<ThresholdFilter level="trace" onMatch="ACCEPT"
onMismatch="DENY" />
</Filters>
</RollingFile> <!-- DEBUG級別日誌 設定日誌格式並配置日誌壓縮格式,壓縮檔案獨立放在一個資料夾內, 日期格式不能為冒號,否則無法生成,因為檔名不允許有冒號,此appender只輸出debug級別的資料到debug.log; -->
<RollingFile name="debug_appender" immediateFlush="true"
fileName="${LOG_HOME}/debug.log" filePattern="${LOG_HOME}/debug/debug - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
<PatternLayout>
<pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
</PatternLayout>
<Policies><!-- 每個日誌檔案最大2MB ; -->
<SizeBasedTriggeringPolicy size="2MB" /> <!-- 如果啟用此配置,則日誌會按檔名生成新壓縮檔案, 即如果filePattern配置的日期格式為 %d{yyyy-MM-dd HH}
,則每小時生成一個壓縮檔案, 如果filePattern配置的日期格式為 %d{yyyy-MM-dd} ,則天生成一個壓縮檔案 -->
<TimeBasedTriggeringPolicy interval="1"
modulate="true" /> </Policies>
<Filters><!-- 此Filter意思是,只輸出debug級別的資料 -->
<ThresholdFilter level="info" onMatch="DENY"
onMismatch="NEUTRAL" />
<ThresholdFilter level="debug" onMatch="ACCEPT"
onMismatch="DENY" />
</Filters>
</RollingFile> <!-- INFO級別日誌 -->
<RollingFile name="info_appender" immediateFlush="true"
fileName="${LOG_HOME}/info.log" filePattern="${LOG_HOME}/info/info - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
<PatternLayout>
<pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="2MB" />
</Policies>
<Filters>
<ThresholdFilter level="warn" onMatch="DENY"
onMismatch="NEUTRAL" />
<ThresholdFilter level="info" onMatch="ACCEPT"
onMismatch="DENY" />
</Filters>
</RollingFile> <!-- WARN級別日誌 -->
<RollingFile name="warn_appender" immediateFlush="true"
fileName="${LOG_HOME}/warn.log" filePattern="${LOG_HOME}/warn/warn - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
<PatternLayout>
<pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="2MB" />
</Policies>
<Filters>
<ThresholdFilter level="error" onMatch="DENY"
onMismatch="NEUTRAL" />
<ThresholdFilter level="warn" onMatch="ACCEPT"
onMismatch="DENY" />
</Filters>
</RollingFile> <!-- ERROR級別日誌 -->
<RollingFile name="error_appender" immediateFlush="true"
fileName="${LOG_HOME}/error.log" filePattern="${LOG_HOME}/error/error - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
<PatternLayout>
<pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="2MB" />
</Policies>
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT"
onMismatch="DENY" />
</Filters>
</RollingFile>
</Appenders> <Loggers>
<!-- 配置日誌的根節點 -->
<!-- 定義logger,只有定義了logger並引入了appender,appender才會生效 -->
<root level="trace">
<appender-ref ref="console_out_appender" />
<appender-ref ref="console_err_appender" />
<appender-ref ref="trace_appender" />
<appender-ref ref="debug_appender" />
<appender-ref ref="info_appender" />
<appender-ref ref="warn_appender" />
<appender-ref ref="error_appender" />
</root> <!-- 第三方日誌系統 -->
<logger name="org.springframework.core" level="info" />
<logger name="org.springframework.beans" level="info" />
<logger name="org.springframework.context" level="info" />
<logger name="org.springframework.web" level="info" />
<logger name="org.jboss.netty" level="warn" />
<logger name="org.apache.http" level="warn" /> </Loggers> </Configuration>

七.log4j2<PatternLayout>子節點淺析

PatternLayout是最重要也是最常用的控制輸出內容的節點,包括類名、時間、行號、日誌級別、序號等都可以控制,同時還可以指定日誌格式,可以使用正則表示式處理輸出結果。

PatternLayout中包含的特殊字元包括\t,\n,\r,\f,用\\輸出單斜線,用%%輸出%。

下面是PatternLayout的引數

Parameter Name

Type

Description

charset

String

輸出的字符集。如果沒有指定,則使用系統預設的字符集輸出。

pattern

String

詳見後面的pattern的表格

replace

RegexReplacement

替換部分輸出中的String。這將會呼叫一個與RegexReplacement轉換器相同的函式,不同的是這是針對整個訊息的。

alwaysWriteExceptions

boolean

預設為true。總是輸出異常,即使沒有定義異常對應的pattern,也會被附在所有pattern的最後。設為false則不會輸出異常。

header

String

可選項。包含在每個日誌檔案的頂部。

footer

String

可選項。包含在每個日誌檔案的尾部。

noConsoleNoAnsi

boolean

預設為false。如果為true,且System.console()是null,則不會輸出ANSI轉義碼。

下面RegexReplacement引數

Parameter Name

Type

Description

regex

String

Java正則表示式

replacement

String

任何匹配正則規則,被正則替換的後值

下面是pattern屬性具體描述(這個表格僅包括了我能看懂的部分,還有很多看不懂並且試驗也不成功的部分我都沒寫。另外用於控制輸出結果顏色的highlight和style我也沒有寫,實在是感覺平時意義不大):

引數名

引數意義

詳細描述

%c{引數}或%logger{引數}

輸出logger的名稱,即語句private static final Logger logger = LogManager.getLogger(App.class.getName())中App.class.getName()的值。也可以使用其他字串。

如果不帶引數,則輸出完整的logger名稱;如果引數是整數n(只支援正整數),則先將logger名稱依照小數點(.)分割成n段,然後取右側的n段;如果引數不是整數,則除了最右側的一段,其他整段字元都用這個字元代替,保留小數點;不管怎麼寫,最右側的一段都保持不變。預設不帶引數,並輸出logger的完整名稱。注意:上面的說明寫得很爛,但是官方文件寫得就這麼爛,而且還不完整,看不懂是必然的,還請看官自己多試驗,才能有所領會。如果看官自己懶得試驗又看不懂,只能建議不要加引數,直接%c輸出完整值。

示例:

pattern表示式

logger名稱

結果

%c{1}

org.apache.com.te.Foo

Foo

%c{2}

org.apache.com.te.Foo

te.Foo

%c{1.}

org.apache.com.te.Foo

o.a.c.t.Foo

%c{1.1.!}

org.apache.com.te.Foo

o.a.!.!.Foo

%c{.}

org.apache.com.te.Foo

….Foo

%C{引數}或%class{引數}

輸出類名。注意,這個是大寫C,上面是小寫c。

引數規則與%c完全一樣,請參見上面的說明。

%d{引數}{時區te{引數}{時區

輸出時間。

第一個大括號數可以是保留關鍵字,也可以是text.SimpleDateFormat字元拼接而成。保留關鍵字有:DEFAULT,ABSOLUTE, COMPACT, DATE, ISO8601, ISO8601_BASIC。

第二個大括號中的引數是java.util.TimeZone.getTimeZone的值,可以設定時區。

示例:

pattern表示式

輸出

%d{DEFAULT}

2012-11-02 14:34:02,781

%d{ISO8601}

2012-11-02T14:34:02,781

%d{ISO8601_BASIC}

20121102T143402,781

%d{ABSOLUTE}

14:34:02,781

%d{DATE}

02 Nov 2012

14:34:02,781

%d{COMPACT}

20121102143402781

%d{HH:mm:ss,SSS}

14:34:02,781

%d{dd MMM yyyy HH:mm:ss,SSS}

02 Nov 2012

14:34:02,781

%d{HH:mm:ss}{GMT+0}

18:34:02

%d{UNIX}

1351866842

%d{UNIX_MILLIS}

1351866842781

輸出特殊字元

&, <, >, ”, ’全都要使用實體名稱或實體編號替代,即

符號

實體名稱

實體編號

&

&amp;

&

<

&lt;

<

>

&gt;

>

&quot;

"

&apos;

'

官方文件說pattern刪除了\r和\n,但是經我測試可以使用,明顯是官方文件的錯誤。

%F|%file

輸出檔名

僅僅是檔名稱,如Test.java,不包含路徑名稱

highlight{pattern}{style}

高亮顯示結果

%l

輸出完整的錯誤位置,如com.future.ourfuture.test.test.App.tt(App.java:13)

注意1:這個是小寫的L。

注意2:使用該引數會影影響日誌輸出的效能。

%L

輸出錯誤行號,如“13”

注意:使用該引數會影響日誌輸出的效能。

%m或%msg或%message

輸出錯誤資訊,即logger.error(String msg)中的msg

%M或%method

輸出方法名,如“main”,“getMsg”等字串

%n

換行符

根據系統自行決定,如Windows是”\r\n”,Linux是”\n”

%level{引數1}{引數2}{引數3}

引數1用來替換日誌資訊的級別,格式為:{level=label, level=label, …},即使用label代替的字串替換level。其中level為日誌的級別,如WARN/DEBUG/ERROR/TRACE/INFO

引數2表示只保留前n個字元。格式為length=n,n為整型。但引數1中指定了label的字串不受此引數限制

引數3表示結果是大寫還是小寫。引數1指定了label的字串不受此引數限制。

示例:

輸入

輸出

%level{WARN=W, DEBUG=D, ERROR=E, TRACE=T, INFO=I}

logger.warn輸出W, logger.debug輸出D,其他依次類推

%level{ERROR=FSF, length=2, lowerCase=true}

logger.error會輸出FSF,其他均只輸出前兩個字母,且小寫,如wa/de/in/tr

%level{length=3}

所有都只輸出前3個字元,如WAR/DEB /ERR/TRA/INF

%r或%relative

輸出自JVM啟動以來到log事件開始時的毫秒數

replace{pattern}{regex}{substitution}

將pattern的輸出結果,按照正則表示式regex匹配後,使用substitution字串替換

例如:"%replace{%logger }{\.}{/}就是將所有%logger中的小數點(.)全部替換為斜槓,如果%logger是com.future.ourfuture.test.test.App則輸出為com/future/ourfuture/test/test/App。pattern中可以寫多個表示式,如%replace{%logger%msg%C}{\.}{/}%n

%sn或%sequenceNumber

自增序號,每執行一次log事件,序號+1,是一個static變數。

%t或%thread

建立logging事件的執行緒名

%u{RANDOM|TIME}或%uuid{RANDOM|TIME}

依照一個隨機數或當前機器的MAC和時間戳來隨機生成一個UUID

下面是pattern的對齊修飾:

對齊修飾,可以指定資訊的輸出格式,如是否左對齊,是否留空格等。

編寫格式為在任何pattern和%之間加入一個小數,可以是正數,也可以是負數。如%10.20c表示對logger的資訊進行處理。%-10.20m表示對message進行處理。

整數表示右對齊,負數表示左對齊;整數位表示輸出資訊的最小10個字元,如果輸出資訊不夠10個字元,將用空格補齊;小數位表示輸出資訊的最大字元數,如果超過20個字元,則只保留最後20個字元的資訊(注意:保留的是後20個字元,而不是前20個字元)。

下面是一些示例。

格式

是否左對齊

最小寬度

最大寬度

說明

%20

右對齊

20

右對齊,不足20個字元則在資訊前面用空格補足,超過20個字元則保留原資訊

%-20

左對齊

20

左對齊,不足20個字元則在資訊後面用空格補足,超過20個字元則保留原資訊

%.30

不對齊

30

如果資訊超過30個字元,則只保留最後30個字元

%20.30

右對齊

20

30

右對齊,不足20個字元則在資訊前面用空格補足,超過30個字元則只保留最後30個字元

%-20.30

左對齊

20

30

左對齊,不足20個字元則在資訊後面用空格補足,超過30個字元則只保留最後30個字元

參考資料:http://www.cnblogs.com/hafiz/p/6170702.html