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 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容