Logback 1.2.3升级至1.4.14:移除类替代方案及文档查询
Logback 1.4.14中SiftingJoranConfiguratorBase与AbstractAppenderFactoryUsingJoran的替代方案
1. ch.qos.logback.core.sift.SiftingJoranConfiguratorBase
该类在Logback 1.4.x版本中被移除,替代方案如下:
- 若无需自定义配置逻辑,直接使用
ch.qos.logback.core.sift.SiftingJoranConfigurator,传入对应的Context和AppenderFactory即可完成sift配置加载。 - 若需自定义配置扩展,可继承
ch.qos.logback.core.joran.JoranConfiguratorBase,手动处理sift相关配置节点,结合SiftingAppender的新构造与配置API实现需求。
2. ch.qos.logback.core.sift.AbstractAppenderFactoryUsingJoran
该抽象类被移除后,可通过以下方式替代:
- 直接实现
ch.qos.logback.core.sift.AppenderFactory接口,在buildAppender方法内使用JoranConfigurator解析配置、创建Appender实例。 - 若默认逻辑满足需求,直接复用
ch.qos.logback.core.sift.DefaultAppenderFactory即可,无需自定义实现。
自定义AppenderFactory示例代码
import ch.qos.logback.core.Context; import ch.qos.logback.core.sift.AppenderFactory; import ch.qos.logback.core.joran.JoranConfigurator; import ch.qos.logback.core.Appender; import java.io.ByteArrayInputStream; public class CustomAppenderFactory implements AppenderFactory<String> { @Override public Appender<String> buildAppender(Context context, String discriminatingValue) { JoranConfigurator configurator = new JoranConfigurator(); configurator.setContext(context); // 根据区分值生成对应配置 String configXml = "<appender name=\"FILE-" + discriminatingValue + "\" class=\"ch.qos.logback.core.FileAppender\">\n" + " <file>logs/" + discriminatingValue + ".log</file>\n" + " <encoder>\n" + " <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>\n" + " </encoder>\n" + "</appender>"; try { configurator.doConfigure(new ByteArrayInputStream(configXml.getBytes())); return context.getAppender("FILE-" + discriminatingValue); } catch (Exception e) { context.getLogger(CustomAppenderFactory.class).error("Failed to build appender for {}", discriminatingValue, e); return null; } } }
补充说明
Logback 1.4.x对内部API做了精简重构,移除了冗余的抽象基类,核心逻辑合并到了顶层接口与核心实现类中。若需深入理解配置逻辑,可参考SiftingAppender的源码实现,它现在直接依赖AppenderFactory接口创建子Appender,无需中间抽象层。
内容的提问来源于stack exchange,提问作者crimson_joey
相关产品推荐
相关产品推荐

