使用 Logback 记录线程 ID 而不是线程名称

Ara*_*nd 6 multithreading log4j logback log4j2 spring-boot

我有一个 Spring boot 应用程序,并且使用 logback 作为日志记录框架。目前我想显示线程 ID 而不是线程名称。我知道如果您使用%tid.

  • 我可以使用 logback 实现相同的效果还是应该实现自定义线程 ID 提取器?

  • 我正在扩展PatternLayout类并创建一个具有线程 id 及其值的映射。我如何在我的logback.xml

Sev*_*ris 6

这可以通过自定义来完成ClassicConverter,例如:

import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;

public class ThreadIdConverter extends ClassicConverter {
  @Override
  public String convert(final ILoggingEvent e) {
    return String.valueOf(Thread.currentThread().getId());
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,在你的logback.xml

<configuration>
  <conversionRule conversionWord="threadId" converterClass="ThreadIdConverter"/>
  ...
  <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%threadId %msg%n</pattern>
    </encoder>
  </appender>
  ...
</configuration>
Run Code Online (Sandbox Code Playgroud)