一.簡介
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輸出完整值。 示例:
|
||||||||||||||||||||||||
%C{引數}或%class{引數} |
輸出類名。注意,這個是大寫C,上面是小寫c。 |
引數規則與%c完全一樣,請參見上面的說明。 |
||||||||||||||||||||||||
%d{引數}{時區te{引數}{時區 |
輸出時間。 |
第一個大括號數可以是保留關鍵字,也可以是text.SimpleDateFormat字元拼接而成。保留關鍵字有:DEFAULT,ABSOLUTE, COMPACT, DATE, ISO8601, ISO8601_BASIC。 第二個大括號中的引數是java.util.TimeZone.getTimeZone的值,可以設定時區。 示例:
|
||||||||||||||||||||||||
無 |
輸出特殊字元 |
&, <, >, ”, ’全都要使用實體名稱或實體編號替代,即
官方文件說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的字串不受此引數限制。 |
示例:
|
||||||||||||||||||||||||
%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