PatternLayout
优质
小牛编辑
145浏览
2023-12-01
如果要基于模式以特定格式生成日志记录信息,则可以使用org.apache.log4j.PatternLayout格式化日志记录信息。
PatternLayout类扩展了抽象org.apache.log4j.Layout类,并覆盖format()方法以根据提供的模式构造日志记录信息。
PatternLayout也是一个简单的Layout对象,它提供以下Bean Property ,可以使用配置文件进行设置:
Sr.No. | 财产和描述 |
---|---|
1 | conversionPattern 设置转换模式。 默认值为%r [%t]%p%c%x - %m%n |
模式转换字符
下表说明了上述模式中使用的字符以及可在自定义模式中使用的所有其他字符:
转换字符 | 含义 |
---|---|
c | 用于输出日志记录事件的类别。 例如,对于类别名称“abc”,模式%c {2}将输出“bc”。 |
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}将针对密钥clientIP打印存储在MDC中的信息。 |
% | 字面百分号。 %%将打印%符号。 |
格式修饰符
默认情况下,相关信息按原样显示为输出。 但是,借助格式修饰符,可以更改最小字段宽度,最大字段宽度和对齐方式。
下表涵盖了各种修饰符场景:
格式修饰符 | 左对齐 | 最小宽度 | 最大宽度 | 评论 |
---|---|---|---|---|
%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示例
以下是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