鍍金池/ 教程/ Java/ PatternLayout
Logging 級別
使用文件記錄日志
PatternLayout
安裝
使用數(shù)據(jù)庫記錄日志
示例程序
架構(gòu)
Logging 方法
HTMLLayout
概述
配置
日志格式

PatternLayout

如果您希望基于某種模式生成特定格式的日志信息,可使用 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)換字符

下面的表格解釋了上面模式中用到的字符,以及所有定制模式時能用到的字符:

轉(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 示例

下面是為 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
上一篇:日志格式下一篇:配置