我们正在使用LogBack和我们的项目,我想根据一些数据库值配置记录器,即如果某个DB值设置为true,那么logger应该使用文件和DB appender,如果它是false,那么logger必须使用只有DB appender,
我还想保留使用静态最终记录器,因此每次调用记录器时我都不会创建新实例,
那我怎么能做这样的事呢?
此致
答案 0 :(得分:19)
您应按this example。
中所述以编程方式配置Logbackpublic class Main {
public static void main(String[] args) {
Logger logger = (Logger) LoggerFactory.getLogger("abc.xyz");
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
FileAppender<LoggingEvent> fileAppender =
(FileAppender<LoggingEvent>) 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
}
}
答案 1 :(得分:1)
从数据库中读取配置属性背后是否有特定原因?一个建议是使用JNDI。 Logback可以使用标记读取JNDI配置的值。