14 Log4j PatternLayout
Log4j PatternLayout
如果您希望基于某种模式生成特定格式的日志信息,可使用org.apache.log4j.PatternLayout
格式化您的日志信息。
PatternLayout
继承自抽象类org.apache.log4j.Layout
,覆盖了其format()
方法,通过提供的模式,来格式化日志信息。
PatternLayout
是一个简单的Layout
对象,提供了如下属性,该属性可通过配置文件更改:
PatternLayout 属性 |
描述 |
---|---|
ConversionPattern |
设置转换模式,默认为 %r [%t] %p %c %x - %m%n 。 |
TTCC
https://zh.wikipedia.org/wiki/Log4j#TTCC
TTCC
是log4j
使用的消息格式。TTCC
是Time Thread Category Component
(时间、线程、类别、组件)的缩写。例如,采用以下模式(pattern
):%r [%t] %-5p %c %x - %m%n
模式参数 描述 %r
用于输出从 layout
(布局)的构建到日志事件创建所经过的毫秒数。%t
用来输出生成该日志事件的线程的名称。 %p
用于输出日志事件的优先级。 %c
用于输出日志事件的 category
(类别)。%x
用于输出与产生该日志事件的线程相关联的 NDC
(嵌套诊断上下文,nested diagnostic context
)。%X{key}
用于输出与产生指定的 key
的日志事件的线程相关联的MDC
(映射诊断上下文,mapped diagnostic context
)[4]%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 |
该字符后跟 MDC 键,比如 X{clientIP} 会输出保存在 MDC 中键 clientIP 对应的值。 |
% |
百分号, %% 会输出一个% 。 |
格式修饰符
缺省情况下,信息保持原样输出。但是借助格式修饰符的帮助,就可调整最小列宽、最大列宽以及对齐。
下面的表格涵盖了各种修饰符:
格式修饰符 | 左对齐 | 最小宽度 | 最大宽度 | 注释 |
---|---|---|---|---|
%20c |
否 | 20 | 无 | 如果列名少于 20 个字符,左边使用空格补齐。 |
%-20c |
是 | 20 | 无 | 如果列名少于 20 个字符,右边使用空格补齐。 |
%.30c |
不适用 | 无 | 30 | 如果列名长于 30 个字符,从开头剪除。 |
%20.30c |
否 | 20 | 30 | 如果列名少于 20 个字符,左边使用空格补齐,如果列名长于 30 个字符,从开头剪除。 |
%-20.30c |
是 | 20 | 30 | 如果列名少于 20 个字符,右边使用空格补齐,如果列名长于 30 个字符,从开头剪除。 |
PatternLayout示例
下面是为PatternLayout
编写的一个简单配置:
1 | # Define the root logger with appender file |
下面是生成日志信息的Java
程序:
1 | package demo; |
编译并运行上述程序,会在项目目录下生成一个名为log.out
的文件,该文件包含如下日志信息:
1 | 2020-08-06-main--DEBUG-demo.Log4jExample:Hello-this-is-a-debug-message |