2014-02-24 148 views
7

我想让LogBack DBAppender从编程配置工作,但似乎无法使其运行。以编程方式配置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); 

任何想法什么可能是错的?我在控制台中看到一个日志,但没有任何数据库。一直与这一战斗,并会感谢任何见解!

+0

你已经在数据库中设置一个'loggingConnectionInfo.getUri()'指向表? – Alden

+0

是,所有这一切都设置,并使用XML配置安装时,一切工作正常。 – ebensing

回答

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); 
+0

我曾尝试过,但它没有奏效。我认为主要的事情是与数据库连接不好(整个mysql'%'不包括localhost,doh) – ebensing