有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何向slf4j提供自己的MDCAdapter?

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

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

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


共 (1) 个答案

  1. # 1 楼答案

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

    在项目中创建一个名为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);
    }