Logback学习系列4(Pattern使用方法)

一、Logback中“Pattern”由多个“Pattern分片”组成

先上一个示例:

<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>

对于上述示例中Pattern格式,可理解为由6个“Pattern分片”组成。


Pattern示例组成分析.jpeg

“Pattern”与“Pattern分片”说明如下:

  1. Logback中Pattern是由多个“Pattern分片”组成,“Pattern”分片之间由【空格】、【-】、【[]】、【普通常规字符(串)】、【无分隔符】进行连接。
  2. “Pattern分片”之间可以不需要任务连接字符,例如示例中的“分片5”、“分片6”
  3. “Pattern分片”之间若由【普通常规字符(串)】连接,需要添加其他字符(如空格),避免对“Pattern分片”中关键字造成误导,例如上图中的“分片3”与“分片4”之间若由字母“T"分割“%-5levelT%logger”,此时“分片3”会解析失败,因为系统不识别“%-5levelT”格式

二、单个“Pattern分片”组成可采拆分为7个部分

如下图所示,


pattern分片.png
  1. 第1部分:必须以 % 开头,%为“Pattern分片”开始标识符
  2. 第2部分:选填。用于表示“日志输出分片”采用左对齐还是右对齐。【+】表示右对齐,【-】表示左对齐。其中【+】可省略不写。
  3. 第3部分:选填。用于表示“日志输出分片”的“对齐最小字符个数”。右对齐时,“日志输出分片”字符个数不足【Num1】个数时,在左侧使用空格补齐;左对齐时,“日志输出分片”字符个数不足【Num1】个数时,在右侧使用空格补齐
  4. 第4部分:选填。用于表示控制“日志输出分片”字符最大个数的标识符
  5. 第5部分:选填。【+】用于表示“日志输出分片”字符个数超过【Num2】字符时,将“日志输出分片”从左侧截掉。【-】用于表示“日志输出分片”字符个数超过【Num2】字符时,将“日志输出分片”从右侧截掉。
  6. 第6部分:表示“日志输出分片”最大字符数
  7. 第7部分:表示“日志输出分片”取值占位码

注意事项如下:

  1. 第2、3为一个整体
  2. 第4、5、6为一个整体

三、“日志输出分片”取值占位码

  1. 常用“日志输出分片”取值占位码有以下几种(来至官网):


    1.png
2.png
3.png
4.png
5.png
  1. 重要参数补充说明
  • logger{length} ,length为0时,只取logger名称最后一段;length为非0的较小值时,输出logger名称的“第1段首字母+中间各阶段的首字母+最后一段全名称”;length为非0的相对较大值时,输出logger名称的“第1阶段首字母+中间阶段首字母+倒数第二段全名称+最后一段全名称”,以此类推。
  • 影响运行性能的参数:C/class、L。因为这几个参数需要logback执行特殊操作获取堆栈信息才能取到值。

四、示例

  1. logback.xml
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <appender name="STDOUT1" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %n</pattern>
        </encoder>
    </appender>
    <appender name="STDOUT2" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%-10.-12d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="STDOUT3" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %logger{0}-%logger{1}-%logger{2}-%logger{3}-%logger{4}-%logger{5}-%logger{6}-%logger{7}-%logger{8}-%logger{9}-%logger{10} %n</pattern>
        </encoder>
    </appender>
    <appender name="STDOUT4" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %logger{21}-%logger{22}-%logger{23}-%logger{24}-%logger{25}-%logger{26}-%logger{27}-%logger{28}-%logger{29}-%logger{30} %n</pattern>
        </encoder>
    </appender>
    <appender name="STDOUT5" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %logger{31}-%logger{32}-%logger{33}-%logger{34}-%logger{35}-%logger{36}-%logger{37}-%logger{38}-%logger{39}-%logger{40} %n</pattern>
        </encoder>
    </appender>
    <logger name="mytest" level="debug">
        <appender-ref ref="STDOUT1"/>
        <appender-ref ref="STDOUT2"/>
        <appender-ref ref="STDOUT3"/>
        <appender-ref ref="STDOUT4"/>
        <appender-ref ref="STDOUT5"/>
    </logger>
    <root level="info">
    </root>
</configuration>
  1. 代码
@RestController
public class TestController {
    private static Logger log= LoggerFactory.getLogger(TestController.class);
    @GetMapping("/test")
    public String test(){
        log.info("log-message");
        return "test";
    }
}
  1. 打印日志
2021-10-05 21:15:41 
2021-10-05 2 [http-nio-8090-exec-1] INFO  mytest.controller.TestController - log-message
2021-10-05 21:15:41 TestController-m.c.TestController-m.c.TestController-m.c.TestController-m.c.TestController-m.c.TestController-m.c.TestController-m.c.TestController-m.c.TestController-m.c.TestController-m.c.TestController 
2021-10-05 21:15:41 m.c.TestController-m.c.TestController-m.c.TestController-m.c.TestController-m.c.TestController-m.c.TestController-m.controller.TestController-m.controller.TestController-m.controller.TestController-m.controller.TestController 
2021-10-05 21:15:41 m.controller.TestController-mytest.controller.TestController-mytest.controller.TestController-mytest.controller.TestController-mytest.controller.TestController-mytest.controller.TestController-mytest.controller.TestController-mytest.controller.TestController-mytest.controller.TestController-mytest.controller.TestController 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容