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.