如何通过Logback API在配置中添加或移除Logger实现动态重载
Logback 没有单独的addLogger类接口,调用LoggerContext.getLogger(String name)方法时,若指定名称的logger不存在,框架会自动完成创建、注册到上下文的逻辑,你只需要对返回的logger对象做属性配置即可,效果和在配置文件中声明<logger>标签完全一致。
实现示例代码
import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import org.slf4j.LoggerFactory; public class LogbackDynamicConfig { public void addCustomLogger() { // 1. 获取全局LoggerContext实例 LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); // 2. 获取目标logger,不存在时会自动创建(即实现「添加logger」的效果) Logger targetLogger = context.getLogger("chapters.configuration"); // 3. 配置日志级别,和配置文件的level属性效果一致 targetLogger.setLevel(Level.INFO); // 可选配置:绑定已有的STDOUT appender // 先从root logger获取配置文件中定义的STDOUT appender Logger rootLogger = context.getLogger(Logger.ROOT_LOGGER_NAME); ch.qos.logback.core.Appender stdoutAppender = rootLogger.getAppender("STDOUT"); targetLogger.addAppender(stdoutAppender); // 可选配置:若不需要继承父级logger的appender,关闭additivity即可 // targetLogger.setAdditivity(false); } }
移除logger的补充说明
如果需要动态删除已配置的logger,可调用LoggerContext.removeLogger(String name)方法,该方法适配logback 1.1.10及以上版本;低版本可将对应logger的级别设置为null,让其完全继承父级logger的配置,即可实现等效的下线效果。
内容的提问来源于stack exchange,提问作者Prateek Khatri
相关产品推荐
相关产品推荐

