log4j - 模式佈局



如果您想根據特定模式生成日誌資訊,則可以使用org.apache.log4j.PatternLayout來格式化您的日誌資訊。

PatternLayout 類擴充套件了抽象org.apache.log4j.Layout類,並覆蓋了format()方法,以根據提供的模式來構造日誌資訊。

PatternLayout 也是一個簡單的 Layout 物件,它提供了以下可以使用配置檔案設定的Bean 屬性

序號 屬性及描述
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 的資訊。
% 字面百分號。%% 將列印 % 符號。

格式修飾符

預設情況下,相關資訊將按原樣顯示為輸出。但是,藉助格式修飾符,可以更改最小欄位寬度、最大欄位寬度和對齊方式。

下表涵蓋了各種修飾符場景

格式修飾符 左對齊 最小寬度 最大寬度 註釋
%20c false 20 如果類別名稱少於 20 個字元,則用空格左填充。
%-20c true 20 如果類別名稱少於 20 個字元,則用空格右填充。
%.30c NA 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");
   }
}

編譯並執行上述程式。它將在 /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
log4j_log_formatting.htm
廣告
© . All rights reserved.