前言
每次看到项目中的logback.xml都一脸懵逼,例如:
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</layout>
最近比较闲,就照着官网看一下从打印布局入手。
PatternLayout
logback定义一些关键字,他们以%开头。在运行时,会将他们转为实际的意义。为了演示效果,先写个测试类
package com.example;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyApp {
private static final Logger logger = LoggerFactory.getLogger(MyApp.class);
public static void main(String[] args) {
logger.info("测试日志");
}
}
关键字 | 作用 | 测试结果 | 附加说明 |
---|---|---|---|
logger{length} c{length} lo{length} | 输出来源logger的名字 | com.example.MyApp | ![]() 注意最后一个单词Bar永远不会简写 |
class{length} | 输出类名 | com.example.MyApp | 生成这个不快,避免使用 |
contextName | 每个logback.xml都有一个contextName,如果没自己设置,那就是默认的:default | default | <contextName>测试contextName</contextName> |
date{pattern, timezone} d{pattern} date{pattern} d{pattern, timezone} | 输出日期模板和SimpleDateFormat一样的 | ||
F / file | 原始的文件名 | MyApp.java | |
caller{depth} caller{depthStart…depthEnd} caller{depth, evaluator-1, … evaluator-n} caller{depthStart…depthEnd, evaluator-1, … evaluator-n} | 输出生成日志时间调用者的信息 | Caller+0 at com.example.MyApp.main(MyApp.java:11) | |
L / line | 输出调用时所在文件的行号 | 11 | ![]() |
m / msg / message | 要打印的字符串 | 测试日志 | |
M / method | 输出日志语句所在的方法名 | main | |
n | 换行 | ||
p / le / level | 输出打印语句的日志级别 | INFO | |
r / relative | 输出程序启动到打印日志所经历的毫秒数 | 696 | |
t / thread | 输出日志语句的线程名 | main |
格式化
通过格式化,我们可以控制每个关键字的对齐方式,最大宽度和最小宽度。默认情况下是右对齐。左对齐符号:-
,可以让他在左边补空格,最大宽度:由.
+数字组成。
格式修饰符 | 左对齐 | 最小宽度 | 最大宽度 | 说明 |
---|---|---|---|---|
%20logger | 否 | 20 | 无 | 日志名字小于20个字符,左边补空格 |
%-20logger | 是 | 20 | 无 | 日志名字小于20个字符,右边补空格 |
%.30logger | NA | 无 | 30 | 日志名字大于30个字符,从左边截断 |
%20.30logger | 否 | 20 | 30 | 小于20个字符,左边补空格,大于30个字符,左边截断 |
%-20.30logger | 是 | 20 | 30 | 小于20个字符,右边补空格,大于30个字符,左边截断 |
%.-30logger | NA | 无 | 30 | 大于30个字符,右边截断 |
看下效果
()
表示分组对于一个输出%-30(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{32} - %msg%n
颜色
可以设置输出文本的颜色,主要要包裹起来:%black(%logger)
关键字 | 效果 |
---|---|
%black | ![]() |
%red | ![]() |
%green | ![]() |
%yellow | ![]() |
%blue | ![]() |
%magenta | ![]() |
%cyan | ![]() |
%white | ![]() |
%gray | ![]() |
%boldRed(上面各种颜色加bold和首字符大写就可以了) | ![]() |
%highlight | ![]() %highlight转换说明符以粗体红色为ERROR级别的事件打印其子模式,WARN为红色,INFO为BLUE,其他级别为默认颜色。 |