如果您希望基于某種模式生成特定格式的日志信息,可使用 org.apache.Log4j.PatternLayout
格式化您的日志信息。
PatternLayout
繼承自抽象類 org.apache.Log4j.Layout
,覆蓋了其 format()
方法,通過提供的模式,來格式化日志信息。
PatternLayout
是一個簡單的 Layout
對象,提供了如下屬性,該屬性可通過配置文件更改:
序號 | 屬性 & 描述 |
---|---|
1 |
conversionPattern
設(shè)置轉(zhuǎn)換模式,默認為 %r [%t] %p %c %x - %m%n。 |
下面的表格解釋了上面模式中用到的字符,以及所有定制模式時能用到的字符:
轉(zhuǎn)換字符 | 含義 |
---|---|
c | 使用它為輸出的日志事件分類,比如對于分類 "a.b.c",模式 %c{2} 會輸出 "b.c" 。 |
C | 使用它輸出發(fā)起記錄日志請求的類的全名。比如對于類 "org.apache.xyz.SomeClass",模式 %C{1} 會輸出 "SomeClass"。 |
d | 使用它輸出記錄日志的日期,比如 %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}。 |
F | 在記錄日志時,使用它輸出文件名。 |
l | 用它輸出生成日志的調(diào)用者的地域信息。 |
L | 使用它輸出發(fā)起日志請求的行號。 |
m | 使用它輸出和日志事件關(guān)聯(lián)的,由應(yīng)用提供的信息。 |
M | 使用它輸出發(fā)起日志請求的方法名。 |
n | 輸出平臺相關(guān)的換行符。 |
p | 輸出日志事件的優(yōu)先級。 |
r | 使用它輸出從構(gòu)建布局到生成日志事件所花費的時間,以毫秒為單位。 |
t | 輸出生成日志事件的線程名。 |
x | 輸出和生成日志事件線程相關(guān)的 NDC (嵌套診斷上下文)。 |
X | 該字符后跟 MDC 鍵,比如 X{clientIP} 會輸出保存在 MDC 中鍵 clientIP 對應(yīng)的值。 |
% | 百分號, %% 會輸出一個 %。 |
缺省情況下,信息保持原樣輸出。但是借助格式修飾符的幫助,就可調(diào)整最小列寬、最大列寬以及對齊。
下面的表格涵蓋了各種修飾符:
格式修飾符 | 左對齊 | 最小寬度 | 最大寬度 | 注釋 |
---|---|---|---|---|
%20c | 否 | 20 | 無 | 如果列名少于 20 個字符,左邊使用空格補齊。 |
%-20c | 是 | 20 | 無 | 如果列名少于 20 個字符,右邊使用空格補齊。 |
%.30c | 不適用 | 無 | 30 | 如果列名長于 30 個字符,從開頭剪除。 |
%20.30c | 否 | 20 | 30 | 如果列名少于 20 個字符,左邊使用空格補齊,如果列名長于 30 個字符,從開頭剪除。 |
%-20.30c | 是 | 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");
}
}
編譯并運行上述程序,會在目錄 /usr/home/Log4j
下生成一個名為 log.out
的文件,該文件包含如下日志信息:
2010-03-23-main--DEBUG-Log4jExample:Hello this is an debug message
2010-03-23-main--INFO -Log4jExample:Hello this is an info message