1

我正在使用 slf4j 和 logback 为我的一组微服务提供日志服务。

我想确保我添加到 MDC 的任何条目始终具有小写名称,因此我正在研究用类似的实现替换 LogBackMDCAdapter 类,该实现只是强制键名称为小写。

这是一个明智的做法吗?如果是,我如何让我的 MDC 适配器优先于 Logback 版本使用?

4

1 回答 1

0

这是我最终使用的解决方案。

org.slf4j.impl.StaticMDCBinder在您的项目中创建一个名为的类。这可以是org.slf4j.impl.StaticMDCBinderslf4j 附带的副本。

更改该类以返回您自己的 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);
}
于 2019-05-14T15:44:07.370 回答