0

我遇到了使用相同名称的 3rd 方库和线程的问题。有没有办法显示线程的哈希或唯一 ID?

我最终创建了自己的转换器来处理它,我不确定我是否遗漏了什么。

这就是我所拥有的

import org.springframework.stereotype.Component;

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

/**
 * Creates a hash string for the current thread
 */
@Component
public class ThreadHashHexString extends ClassicConverter {
  @Override
  public String convert(ILoggingEvent event) {
    return Integer.toHexString(System.identityHashCode(Thread.currentThread()));

  }
}
4

1 回答 1

1

不幸的是,logback 仅在其LoggingEvent. 即 logback 不会捕获线程 ID 或有关记录事件的线程的任何其他信息。

您提出的解决方案的问题在于它假设当前线程是LoggingEvent生成的线程,但情况并非总是如此。例如,如果使用异步附加程序,则调用转换器的当前线程将是编码事件的线程,而不是记录事件的线程。

如果您没有使用异步附加程序,那么您可以Thread.currentThread()像以前一样在转换器中使用。或者(因为您使用 logstash-logback-encoder 标记了问题),您可以实现自己的JsonProvider以将线程 id/identityHashCode 记录为 JSON 字段。

于 2020-04-24T02:49:43.053 回答