SLF4J – Logback:如何在运行时配置记录器?

我们正在使用LogBack和我们的项目,我想根据一些数据库值配置记录器,即如果某个DB值设置为true,那么logger应该同时使用文件和DB appender,如果它是false,那么logger必须只使用DB appender ,

我还想保留使用静态最终记录器,因此每次调用记录器时我都不会创建新实例,

那我怎么能这样做呢?

问候,

您应该按照此示例中的描述以编程方式配置Logback。

public class Main { public static void main(String[] args) { Logger logger = (Logger) LoggerFactory.getLogger("abc.xyz"); LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); FileAppender fileAppender = (FileAppender) logger.getAppender("file"); if(fileAppender != null) { fileAppender.stop(); fileAppender.setFile("new.log"); PatternLayout pl = new PatternLayout(); pl.setPattern("%d %5p %t [%c:%L] %m%n)"); pl.setContext(lc); pl.start(); fileAppender.setLayout(pl); fileAppender.setContext(lc); fileAppender.start(); } ... etc } } 

从数据库中读取配置属性背后是否有特定原因? 一个建议是使用JNDI。 Logback可以使用标记读取JNDI配置的值。