% thread и повторяющиеся имена потоков - PullRequest
0 голосов
/ 16 марта 2020

Я столкнулся с проблемами со сторонними библиотеками и потоками с тем же именем. Есть ли способ показать ха sh или уникальный идентификатор для потока?

Я закончил тем, что создал свой собственный конвертер для обработки, я не был уверен, что что-то упустил.

Вот что у меня есть

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()));

  }
}

1 Ответ

1 голос
/ 24 апреля 2020

К сожалению, logback записывает только имя потока в его LoggingEvent. то есть logback не захватывает идентификатор потока или любую другую информацию о потоке, который зарегистрировал событие.

Проблема с вашим предлагаемым решением состоит в том, что предполагается, что текущий поток является потоком, в котором LoggingEvent было сгенерировано, что не всегда будет так. Например, если используется асинхронный appender, текущий поток, в котором вызывается конвертер, будет потоком, который кодирует событие, а не потоком, который зарегистрировал событие.

Если вы not с использованием асинхронного приложения, тогда вы можете использовать Thread.currentThread() в конвертере, как вы это сделали. Или (поскольку вы пометили вопрос с помощью logsta sh -logback-encoder), вы можете реализовать свой собственный JsonProvider, чтобы зарегистрировать идентификатор потока / identityHashCode как поле JSON.

...