我如何向 slf4j 提供我自己的 MDCAdapter?
How do I supply my own MDCAdapter to slf4j?
我正在使用 slf4j 和 logback 为我的微服务集提供日志记录服务。
我想确保我添加到 MDC 总是 的任何条目都具有小写名称,因此我正在研究用类似的替代 LogBackMDCAdapter class仅强制键名称为小写的实现。
这是明智的做法吗?如果是,我如何让我的 MDC 适配器优先于 Logback 版本使用?
这是我最终使用的解决方案。
在您的项目中创建一个名为 org.slf4j.impl.StaticMDCBinder
的 class。这可以是 slf4j 附带的 org.slf4j.impl.StaticMDCBinder
的副本。
将 class 更改为 return 您自己的 MDCAdapter 实例。因为我知道我将使用 Logback 作为底层日志系统,所以我只是 subclassed 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);
}
我正在使用 slf4j 和 logback 为我的微服务集提供日志记录服务。
我想确保我添加到 MDC 总是 的任何条目都具有小写名称,因此我正在研究用类似的替代 LogBackMDCAdapter class仅强制键名称为小写的实现。
这是明智的做法吗?如果是,我如何让我的 MDC 适配器优先于 Logback 版本使用?
这是我最终使用的解决方案。
在您的项目中创建一个名为 org.slf4j.impl.StaticMDCBinder
的 class。这可以是 slf4j 附带的 org.slf4j.impl.StaticMDCBinder
的副本。
将 class 更改为 return 您自己的 MDCAdapter 实例。因为我知道我将使用 Logback 作为底层日志系统,所以我只是 subclassed 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);
}