如何为slf4j提供我自己的MDCAdapter?

时间:2019-05-13 10:04:00

标签: java slf4j logback-classic

我正在使用slf4j和logback为我的微服务集提供日志记录服务。

我想确保我添加到MDC中的所有条目都始终使用小写字母名称,因此我正在研究用类似的实现替换LogBackMDCAdapter类,该实现只是强制将键名设置为小写。

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

1 个答案:

答案 0 :(得分:0)

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

在项目内部创建一个名为org.slf4j.impl.StaticMDCBinder的类。这可以是slf4j随附的org.slf4j.impl.StaticMDCBinder的副本。

更改该类以返回您自己的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);
}