本文概述
Log4j提供org.apache.log4j.PattrernLayout类, 以基于模式以特定格式生成日志记录信息。
PatternLayout扩展了抽象的org.apache.log4j.Layout类, 并重写了format()方法以根据提供的模式构造日志记录信息。
PatternLayout也是一个简单的布局对象, 提供Bean属性, 即conversionPattern, 可以使用配置文件进行设置:
conversionPattern:此属性用于设置转换模式。默认值为%r [%t]%p%c%x-%m%n
模式转换字符
让我们看一下下表, 介绍转换模式中使用的字符以及自定义模式中可以使用的所有其他字符:
转换字符 | Meaning |
---|---|
c | 它用于输出日志事件的类别。例如:对于类别名称x.y.z, 模式%c {2}将输出y.z。 |
C | 它用于输出发出日志记录请求的调用方的全限定类名。例如, 对于类名” org.apache.abc.MyClass”, 模式%C {1}将输出” MyClass”。 |
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中存储的信息。 |
% | 文字百分号。 %%将打印一个%符号。 |
格式修饰符
缺省情况下, 相关信息显示为常规输出。但是, log4j提供了格式修饰符。借助于此, 可以更改最大字段宽度, 最小字段宽度和对齐方式。
让我们看一些修饰符:
格式编辑 | 左对齐 | 最小宽度 | maximum width | comment |
---|---|---|---|---|
%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的一个简单示例。
以下是PatternLayout的简单配置文件:
log4j.properties:
# 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
Log4jExample.java:
import org.apache.log4j.Logger;
import java.io.*;
import java.sql.SQLException;
import java.util.*;
public class Log4jExample {
/* Get actual name of the class 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");
}
}
当编译并运行上述程序时, 你将在c:/ usr / home / log4j目录中获得一个log.out文件, 该文件将包含以下日志信息:
输出
2019-09-16-main--DEBUG-Log4jExample:Hello this is an debug message
2019-09-16-main--INFO - Log4jExample:Hello this is an info message
评论前必须登录!
注册