如果想生成基于模式的特定格式的日志信息,那么可以使用 org.apache.log4j.PatternLayout 格式化日志信息。
PatternLayout類擴展抽象 org.apache.log4j.Layout 類并覆蓋format()方法根據提供的模式構建日志信息。
PatternLayout也是一個簡單的布局對象,它提供下列Bean屬性,可以通過配置文件進行設置:
S.N. |
屬性和說明 |
1 |
conversionPattern |
下表說明了以上模式使用的字符和所有其他字符,可以在自定義模式中使用:
轉換字符 |
表示的意思 |
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 message2010-03-23-main--INFO -log4jExample:Hello this is an info message