以编程方式配置LogBack DBAppender

ebe*_*ing 7 java logging logback

我试图让LogBack DBAppender从编程配置中运行,但似乎无法让它运行起来.

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
DBAppender dbAppender = new DBAppender();
dbAppender.setContext(lc);
DriverManagerConnectionSource connectionSource = new DriverManagerConnectionSource();
connectionSource.setDriverClass("com.mysql.jdbc.Driver");
connectionSource.setUrl(loggingConnectionInfo.getUri());
connectionSource.setUser(loggingConnectionInfo.getUser());
connectionSource.setPassword(loggingConnectionInfo.getPassword());
connectionSource.setContext(lc);
connectionSource.start();
dbAppender.setConnectionSource(connectionSource);
dbAppender.start();

logger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
logger.setLevel(Level.DEBUG);
logger.addAppender(dbAppender);
Run Code Online (Sandbox Code Playgroud)

知道什么可能是错的吗?我在控制台上看到了一个日志,但没有任何内容进入数据库.已经有一段时间与这个战斗,并将欣赏任何见解!

Ald*_*den 1

我相信 @ebensing 发现了问题,那就是LoggerContext. 这是一个工作版本,最大的区别是logger.getLoggerContext()

Logger logger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
logger.setLevel(Level.DEBUG);

DriverManagerConnectionSource connSource = new DriverManagerConnectionSource();
connSource.setDataSource(ds);
connSource.setContext(logger.getLoggerContext());
connSource.start();

DBAppender dbAppender = new DBAppender();
dbAppender.setConnectionSource(connSource);
dbAppender.setContext(logger.getLoggerContext());
dbAppender.start();

logger.addAppender(dbAppender);
Run Code Online (Sandbox Code Playgroud)