log4j PatternLayout

如果想生成基於模式的特定格式的日誌信息,那麼可以使用 org.apache.log4j.PatternLayout 格式化日誌信息。

PatternLayout類擴展抽象 org.apache.log4j.Layout 類並覆蓋format()方法根據提供的模式構建日誌信息。 

PatternLayout也是一個簡單的佈局對象,它提供下列Bean屬性,可以通過配置文件進行設置:

S.N.

屬性和說明

1

conversionPattern
設置轉換模式。默認爲 %r [%t] %p %c %x - %m%n

模式轉換字符:

下表說明了以上模式使用的字符和所有其他字符,可以在自定義模式中使用:

轉換字符

表示的意思

c

用於輸出的記錄事件的類別。例如,對於類別名稱"a.b.c" 模式  %c{2} 會輸出 "b.c"

C

用於輸出呼叫者發出日誌請求的完全限定類名。例如,對於類名 "org.apache.xyz.SomeClass", 模式 %C{1} 會輸出 "SomeClass".

d

用於輸出的記錄事件的日期。例如, %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}.

F

用於輸出被髮出日誌記錄請求,其中的文件名

l

用於將產生的日誌事件調用者輸出位置信息

L

用於輸出從被髮出日誌記錄請求的行號

m

用於輸出使用日誌事件相關聯的應用程序提供的消息

M

用於輸出發出日誌請求所在的方法名稱

n

輸出平臺相關的行分隔符或文字

p

用於輸出的記錄事件的優先級

r

用於輸出毫秒從佈局的結構經過直到創建日誌記錄事件的數目

t

用於輸出生成的日誌記錄事件的線程的名稱

x

用於與產生該日誌事件的線程相關聯輸出的NDC(嵌套診斷上下文)

X

在X轉換字符後面是鍵爲的MDC。例如  X{clientIP} 將打印存儲在MDC對鍵clientIP的信息

%

文字百分號 %%將打印%標誌

格式修飾符:

默認情況下,相關資料原樣輸出。然而,隨着格式修飾符的幫助下,可以改變最小字段寬度,最大字段寬度和對齊。

下表涵蓋了各種各樣的修飾符的情況:

Format modifier

left justify

minimum width

maximum width

註釋

%20c

false

20

none

用空格左墊,如果類別名稱少於20個字符長

%-20c

true

20

none

用空格右墊,如果類別名稱少於20個字符長

%.30c

NA

none

30

從開始截斷,如果類別名稱超過30個字符長

%20.30c

false

20

30

用空格左側墊,如果類別名稱短於20個字符。但是,如果類別名稱長度超過30個字符,那麼從開始截斷。

%-20.30c

true

20

30

用空格右側墊,如果類別名稱短於20個字符。但是,如果類別名稱長度超過30個字符,那麼從開始截斷。

PatternLayout 示例:

以下是針對 PatternLayout 一個簡單的配置文件:

# Define the root logger with appender file log = /usr/home/log4j
log4j.rootLogger = DEBUG, FILE # Define the file appender log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=${log}/log.out # Define the layout for file appender log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern= %d{yyyy-MM-dd}-%t-%x-%-5p-%-10c:%m%n

現在考慮下面產生日誌信息的Java例子:

import org.apache.log4j.Logger; import java.io.*; import java.sql.SQLException; import java.util.*; public class log4jExample{ /* Get actual class name to be printed on */ static Logger log = Logger.getLogger( log4jExample.class.getName()); public static void main(String[] args) throws IOException,SQLException{ log.debug("Hello this is an debug message"); log.info("Hello this is an info message"); } }

編譯並運行上述程序,它會創建 log.out文件在 /usr/home/log4j 目錄,該文件將有如下的日誌信息:

2010-03-23-main--DEBUG-log4jExample:Hello this is an debug message 2010-03-23-main--INFO -log4jExample:Hello this is an info message