在之前的文章中我也分享过,如何去使用Marker标记不同的日志来源, 用来简单的做日志分类, 但最近发现使用的过程中有误区,可能会导致以后的替换日志实现框架的时候出现不兼容的问题。
以Log4j的实现为例
误区
使用日志实现类的Marker来创建Marker,如以下的代码:
import org.apache.logging.log4j.MarkerManager;
import org.apache.logging.slf4j.Log4jMarker;
import org.slf4j.Marker;
private static final Marker MARKER = new Log4jMarker(MarkerManager.getMarker("test_marker"));
这样使用起来是没啥问题,但如果把日志框架Log4j给替换掉的时候,就不能做到无痛替换,项目中所有这样创建Marker的地方都必须修改,这样就失去了使用SLF4J的意义。
为什么这样写也能使用呢?
因为Log4jMarker继承了org.slf4j.Marker
正确的使用方式
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
private static final Marker MARKER = MarkerFactory.getMarker("test_marker");
slf4j.MarkerFactory是怎么绑定到log4j的呢?
看看MarkerFactory的源码就知道了
import org.slf4j