http://logback.qos.ch/manual/layouts.htmlPatternLayout
转换模式类似于C语言里的printf()。
转移字符:
c{length}
lo{length}
logger{length}
其中的length代表输出的logger长度。
设为0的话例外,仅输出最右边的logger名。
其余情况会自动计算,尽量使得输出的总字符串长度小于指定长度——但是,最右边的logger名称无论如何会完整保留,同时前面的每一级logger,最少会被精简到1个字符。
——%c{1}
C{length}
class{length}
打印调用者的类名称,设置方法与上面一样。
性能不高。
contextName
cn
打印logger在event最初绑定的logger context的名称。
d{pattern}
date{pattern}
d{pattern, timezone}
date{pattern, timezone}
输入日志时间,使用java.text.SimpleDateFormat的日期格式化方法。
如果不指定日期格式,默认使用ISO8601,也就是2006-10-20 14:06:49,812这种形式。
——%d
F / file
输出java源文件的名称。
性能不高。
caller{depth}
caller{depth, evaluator-1, ... evaluator-n}
打印日志事件的调用堆栈。
使用评估器evaluator决定是否打印。
L
line
输出日志记录请求发起的行数。
性能不高。
m
msg
message
日志正文
——%m
M
method
日志调用方法名。
性能不高
n
操作系统对应的换行符
——%n
p
le
level
日志等级
r
relative
应用程序启动到日志创建的相对时间
t
thread
线程名
——%t
X{key:-defaultVal}
mdc{key:-defaultVal}
MDC信息
ex{depth}
exception{depth}
throwable{depth}
ex{depth, evaluator-1, ..., evaluator-n}
exception{depth, evaluator-1, ..., evaluator-n}
throwable{depth, evaluator-1, ..., evaluator-n}
输出异常堆栈深度(如果有的话),默认full全部输出。
可以指定的参数值:
short:打印堆栈的第一行
full:打印所有行
任何数字:指定行数
使用评估器evaluator决定是否打印。
xEx{depth}
xException{depth}
xThrowable{depth}
xEx{depth, evaluator-1, ..., evaluator-n}
xException{depth, evaluator-1, ..., evaluator-n}
xThrowable{depth, evaluator-1, ..., evaluator-n}
跟上面的类似,但是附加了包信息。
如果包信息不准确(是猜测的),那么会自动在包信息前面附加一个“~”字符。
如果在日志信息模式里,未指定任何异常格式,那么系统会自动在末尾加上一个%xEx。
如果不想打印包信息(例如netbean里会出问题),那么在日志模式的末尾明确指定%ex即可,就会输出不包含包信息的堆栈。
如果想不打印任何异常堆栈信息,可以使用%nopex。
——%xEx
nopex
nopexception
加上%nopex可以阻止系统自动在日志模式末尾添加%xEx——也就是完全禁止异常堆栈打印。
marker
输出关联的marker信息,如果marker多级关联,会都打印出来。
property{key}
输出key关联的属性——定义在logger context或者system properties里面。
replace(p){r, t}
将p中的所有符合r正则的字符串,都替换成t。
例如%replace(%logger%msg){'\.', '/'},会将输出的logger和msg信息中的点号都替换成斜杠。
rEx{depth}
rootException{depth}
rEx{depth, evaluator-1, ..., evaluator-n}
rootException{depth, evaluator-1, ..., evaluator-n}
类似于xEx,也会打印异常的包信息,但是会将root exception打印到前面,跟普通的异常打印顺序是反着的。
转义百分号: \%
正常情况下转义字符会被正确分割,但有些时候例外,例如%date%nHello,系统会解析%nHello失败。如果真的需要在%n后紧跟一个Hello,可以这样:%date%n{}Hello
我一般用这个:
%d [%t] %-5p %c{1} - %m%n
------------------------------------------------------------------
Format modifiers
控制数据段的补齐。
例如 %20.30logger
如果logger长度小于20,则从左边用空格补齐;如果logger长度大于30,则从开头(左边)切去多余字符。
如果20或者30前面有负号,则左右颠倒。
假如想给日志级别只输出1个字符(T,D,W,I,E),不需要自己写一个Converter,而只需要配置一下即可:%.-1level
转义选项:
如果转义选项里面包含特殊字符(特别是在使用正则表达式的时候),例如大小括号、逗号、空格,那么可以用单引号或双引号括起来,例如:
<pattern>%-5level - %replace(%msg){'\d{14,16}', 'XXXX'}%n</pattern>
——这个可以把14到16位的数字(信用卡号)转换为XXXX。
------------------------------------------------------------------
括号的特殊作用:
%-30(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{32} - %msg%n
可以让括号里的两个表达式联合起来按照30个字符补齐。
括号可以用反斜杠转义:\(%d{HH:mm:ss.SSS} [%thread]\)
------------------------------------------------------------------
Coloring
着色,window需要引其它包,linux和mac os本身支持着色。
样例:<pattern>[%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg %n</pattern>
%highlight会将ERROR设为红色加粗,WARN设为红色,INFO设为蓝色,其余默认。
%cyan会将logger名称设为蓝绿色。
------------------------------------------------------------------
Evaluators
EventEvaluator类的实现,用来评估一个事件是否符合打印条件。
<evaluator name="DISP_CALLER_EVAL">
<expression>logger.contains("chapters.layouts") && \
message.contains("who calls thee")</expression>
</evaluator>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%-4relative [%thread] %-5level - %msg%n%caller{2, DISP_CALLER_EVAL}
</pattern>
</encoder>
</appender>
注意因为xml的关系,要用&转义&
应用场景:
例如,如果日志级别是WARN以上,并且logger是来自一个财务模块——那么就打印caller信息。
注意:
在%caller转义模式中,当Evaluators返回true的时候才输出。
在%ex转义模式中,当Evaluatorstrue的时候不输出。
例如下面的配置,当异常对象为TestException时,不输出。
<evaluator name="DISPLAY_EX_EVAL">
<expression>throwable != null && throwable instanceof \
chapters.layouts.TestException</expression>
</evaluator>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%msg%n%ex{full, DISPLAY_EX_EVAL}</pattern>
</encoder>
</appender>
------------------------------------------------------------------
Creating a custom conversion specifier
略
------------------------------------------------------------------
HTMLLayout
使用html表格来布局日志信息。
可以使用普通的pattern转义符,但转义字符之前,不许用包括空格在内的任何字符分隔。
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%relative%thread%mdc%level%logger%msg</pattern>
</layout>
</encoder>
<file>test.html</file>
</appender>
HTMLLayout会自动创建一个DefaultThrowableRenderer,将异常信息打印到完整的一行里。如果不想这样,可以指定一个NOPThrowableRenderer。
用CSS指定表格的样式:略
该Layout最常见的用法是配合SMTPAppender,发送html格式的日志邮件。
------------------------------------------------------------------
Logback access
略