本文概述
- 模式转换字符
- 格式修饰符
PatternLayout扩展了抽象的org.apache.log4j.Layout类, 并重写了format()方法以根据提供的模式构造日志记录信息。
PatternLayout也是一个简单的布局对象, 提供Bean属性, 即conversionPattern, 可以使用配置文件进行设置:
【Log4j-PatternLayout日志】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中存储的信息。 |
% | 文字百分号。 %%将打印一个%符号。 |
让我们看一些修饰符:
格式编辑 | 左对齐 | 最小宽度 | 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的简单配置文件:
log4j.properties:
# Define the root logger with appender filelog = /usr/home/log4jlog4j.rootLogger = DEBUG, FILE# Define the file appenderlog4j.appender.FILE=org.apache.log4j.FileAppenderlog4j.appender.FILE.File=${log}/log.out# Define the layout for file appenderlog4j.appender.FILE.layout=org.apache.log4j.PatternLayoutlog4j.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 message2019-09-16-main--INFO - Log4jExample:Hello this is an info message
推荐阅读
- Log4j日志Appenders解释
- Log4j属性详细解释
- Log4J日志文件
- 2022全新版!Java分布式架构设计与开发实战一起fen享
- 【JAVA基础】== 与 equals区别
- 在.NET Core console application中使用User Secrets(用户机密)
- Android Studio 导入 Eclipse项目 报 Some file crunching failed, see logs for details
- App测试从入门到精通之界面测试
- 关于富文本在Android中的应用以及遇到的坑