Как мне поставить свой собственный MDCAdapter для slf4j? - PullRequest
0 голосов
/ 13 мая 2019

Я использую slf4j и logback для предоставления сервисов регистрации для моего набора микросервисов.

Я хочу убедиться, что любые записи, которые я добавляю в MDC всегда , имеют имена в нижнем регистре, поэтому я исследую замену класса LogBackMDCAdapter аналогичной реализацией, которая просто заставляет имя ключа быть строчным .

Это разумный подход? Если это так, как мне настроить адаптер MDC для использования с версией Logback?

1 Ответ

0 голосов
/ 14 мая 2019

Вот решение, которое я в итоге использовал.

Создайте класс с именем org.slf4j.impl.StaticMDCBinder внутри вашего проекта.Это может быть копия org.slf4j.impl.StaticMDCBinder, поставляемая с slf4j.

Измените этот класс так, чтобы он возвращал ваш собственный экземпляр MDCAdapter.Поскольку я знал, что буду использовать Logback в качестве базовой системы ведения журналов, я просто создал подкласс ch.qos.logback.classic.util.LogbackMDCAdapter и переопределил метод put, чтобы принудительно ввести ключ в нижний регистр.

Связыватель:

public class StaticMDCBinder {
   public static final StaticMDCBinder SINGLETON = new StaticMDCBinder();

   private StaticMDCBinder() {
   }

   public MDCAdapter getMDCA() {
      return new DavesMDCAdapter();
   }

   public String getMDCAdapterClassStr() {
       return DavesMDCAdapter.class.getName();
   }
}

И адаптер MDC

public class DavesMDCAdapter extends LogbackMDCAdapter {

public void put(String key, String val) throws IllegalArgumentException{
    super.put(key.toLowerCase(),val);
}
...