首先来说说这个pattern,在pattern中,规定格式的总是一个字符,比如上面的r,t,p等,在某些情况下,这些字符可以带一些前缀或者后缀信息来规定额外的格式,这个我们待会再看,并且,所有的代表内容的字符,必须放在%之后,才有意义,比如%r[%t]和%r[t]就是完全不同的两个模式,第一个模式中,r和t都具有参数意义,而第二个模式中,t就只是一个输出值了,就不会被特定的内容所替换。
下面简单来看看在PatternLayout中规定了哪些字符和格式:
c:代表Logger的名称,比如cd.itcast;在c后面,可以使用{数字}来添加输出精度限制。比如:Logger.getLogger(“cd.itcast.log”),在%c的样式下,输出cd.itcast.log,假如样式为:%c{2},则输出itcast.log。即{}中的数字限制了从右向左取.的个数。
C:代表输出这条Logger信息的所属类的全限定名。比如,在cd.itcast.log.LogTest中使用:Logger log=Logger.getLogger(“cd.itcast”); log.info();那么使用%C会输出cd.itcast.log.LogTest;这里注意不要把Logger的名字和Logger所属类弄混淆了。另外,在C后面,也可以使用{精度}来限制打印的内容。比如使用%C{2},那么就会打印出log.LogTest。规则和c一样。
d:代表日志输出的时间。在d后面可以使用{format}来规定日期输出的样式。这个format完全采用SimpleDateFormat里面规定的样式格式化日期。如果没有自定义日期,则会使用标准的ISO8601输出样式。比如:
log4j.appender.stdout.layout.conversionPattern=%d
输出:2013-03-15 13:56:23,046
注意后面的046,代表的毫秒数。假如设定的格式为:
log4j.appender.stdout.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss}
则按照格式输出:2013-03-15 13:58:25
另外,Log4J为了提升在使用SimpleDateFormat格式化时间的效率问题,他自己实现了几种高效率的时间格式化方式,我们可以通过使用%d{ABSOLUTE},%d{DATE}和%d{ISO8601}(默认的格式)来格式化。
F:输出日志所在的文件名称。比如:
log4j.appender.stdout.layout.conversionPattern=%F
则输出:LogTest.java
l:输出日志所在的类【文件名】。比如:
log4j.appender.stdout.layout.conversionPattern=%l
则输出:
cd.itcast.log4j.LogTest5.testSimpleLayout(LogTest5.java:115)
这个输出结构很像在程序中报错所提示的错误信息那样。但是这个信息的输出非常耗费性能,一般情况下慎用。
L:输出日志所在的代码行。比如:
log4j.appender.stdout.layout.conversionPattern=%L
则输出115,因为这行输出是在java代码中的115行。这个用于定位代码还是非常有用的。
m:输出日志内容。这个不用多说,就是我们日志的内容。
M:输出日志所在的方法名称。
n:没有特殊意义,就是代表换行,所以在前面所有的PatternLayout示例中,我们最后一个参数总是%n。
p:该行日志的输出级别。
r:从系统启动到输出该行日志的间隔时间(毫秒)
t:输出该行日志的线程名称
x:输出该行日志的NDC信息(这个后面介绍)
X:输出该行日志的MDC信息(这个后面介绍)
在这些格式化信息中,C,F,L,l这几个都是非常消耗性能的,所以一般情况下是不推荐使用的。要使用这些格式是非常简单的,你只需要按照你想要的内容,参照这个对比表,就能很容易的写出来。这些内容也不需要大家去强行记忆,所有相关符号的解释都在PatternLayout类里面写的非常清楚。需要的时候去查一下就行了。
另外,在PatternLayout中还提供了一些用于格式化样式的参数,可以通过这些参数来控制信息的对齐方式,填充最小,最大长度。我们直接来看几个例子就知道了:
这些符号的使用方式都是非常简单的,看一下这个表,就很容易明白了。
下面简单来看看在PatternLayout中规定了哪些字符和格式:
c:代表Logger的名称,比如cd.itcast;在c后面,可以使用{数字}来添加输出精度限制。比如:Logger.getLogger(“cd.itcast.log”),在%c的样式下,输出cd.itcast.log,假如样式为:%c{2},则输出itcast.log。即{}中的数字限制了从右向左取.的个数。
C:代表输出这条Logger信息的所属类的全限定名。比如,在cd.itcast.log.LogTest中使用:Logger log=Logger.getLogger(“cd.itcast”); log.info();那么使用%C会输出cd.itcast.log.LogTest;这里注意不要把Logger的名字和Logger所属类弄混淆了。另外,在C后面,也可以使用{精度}来限制打印的内容。比如使用%C{2},那么就会打印出log.LogTest。规则和c一样。
d:代表日志输出的时间。在d后面可以使用{format}来规定日期输出的样式。这个format完全采用SimpleDateFormat里面规定的样式格式化日期。如果没有自定义日期,则会使用标准的ISO8601输出样式。比如:
log4j.appender.stdout.layout.conversionPattern=%d
输出:2013-03-15 13:56:23,046
注意后面的046,代表的毫秒数。假如设定的格式为:
log4j.appender.stdout.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss}
则按照格式输出:2013-03-15 13:58:25
另外,Log4J为了提升在使用SimpleDateFormat格式化时间的效率问题,他自己实现了几种高效率的时间格式化方式,我们可以通过使用%d{ABSOLUTE},%d{DATE}和%d{ISO8601}(默认的格式)来格式化。
F:输出日志所在的文件名称。比如:
log4j.appender.stdout.layout.conversionPattern=%F
则输出:LogTest.java
l:输出日志所在的类【文件名】。比如:
log4j.appender.stdout.layout.conversionPattern=%l
则输出:
cd.itcast.log4j.LogTest5.testSimpleLayout(LogTest5.java:115)
这个输出结构很像在程序中报错所提示的错误信息那样。但是这个信息的输出非常耗费性能,一般情况下慎用。
L:输出日志所在的代码行。比如:
log4j.appender.stdout.layout.conversionPattern=%L
则输出115,因为这行输出是在java代码中的115行。这个用于定位代码还是非常有用的。
m:输出日志内容。这个不用多说,就是我们日志的内容。
M:输出日志所在的方法名称。
n:没有特殊意义,就是代表换行,所以在前面所有的PatternLayout示例中,我们最后一个参数总是%n。
p:该行日志的输出级别。
r:从系统启动到输出该行日志的间隔时间(毫秒)
t:输出该行日志的线程名称
x:输出该行日志的NDC信息(这个后面介绍)
X:输出该行日志的MDC信息(这个后面介绍)
在这些格式化信息中,C,F,L,l这几个都是非常消耗性能的,所以一般情况下是不推荐使用的。要使用这些格式是非常简单的,你只需要按照你想要的内容,参照这个对比表,就能很容易的写出来。这些内容也不需要大家去强行记忆,所有相关符号的解释都在PatternLayout类里面写的非常清楚。需要的时候去查一下就行了。
另外,在PatternLayout中还提供了一些用于格式化样式的参数,可以通过这些参数来控制信息的对齐方式,填充最小,最大长度。我们直接来看几个例子就知道了:
格式 | 左对齐 | 最小长度 | 最大长度 | 显示示例 |
[%c] | 无 | 不限 | 不限 | [cd.itcast] |
[%15c] | 无 | 15 | 不限 | [ cd.itcast] |
[%-15c] | 是 | 15 | 不限 | [cd.itcast ] |
[%.8c] | 无 | 不限 | 8 | [d.itcast] |
[%5.8c] | 无 | 5 | 8 | [d.itcast] |
[%-5.8] | 是 | 5 | 8 | [d.itcast] |