如果想生成基於模式的特定格式的紀錄檔資訊,那麼可以使用 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 一個簡單的組態檔案:
# 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