我们在项目Logback DBAppender
:
Logger logger = LoggerFactory.getLogger(loggerName);
DBAppender dbAppender = new DBAppender();
DataSourceConnectionSource connectionSource = new DataSourceConnectionSource();
ComboPooledDataSource cpds = new ComboPooledDataSource();
try {
cpds.setDriverClass("oracle.jdbc.driver.OracleDriver");
cpds.setJdbcUrl(dbConfig.getJdbcUrl());
cpds.setUser(dbConfig.getUserID());
cpds.setPassword(dbConfig.getPassword());
} catch (PropertyVetoException e) {
Logs.error("Unable to set driver class. PropertyVetoException: " + e);
}
connectionSource.setDataSource(cpds);
connectionSource.setContext(logger.getLoggerContext());
connectionSource.start();
dbAppender.setConnectionSource(connectionSource);
dbAppender.setContext(logger.getLoggerContext());
dbAppender.start();
logger.addAppender(dbAppender);
所以,我有一个问题 - 当我停止申请时,是否需要关闭该连接源?
类似的东西:
connectionSource.stop();
dbAppender.stop();
还有一个问题。如果我有几个记录器 - 我可以为所有记录器创建一个DBAppender
吗?因为我注意到我们需要添加到dbAppender和connectionSource上下文,例如:
connectionSource.setContext(logger.getLoggerContext());
dbAppender.setContext(logger.getLoggerContext());
所有记录器的上下文是否相同,我只需要从其中一个记录器中添加它?
答案 0 :(得分:1)
自Logback v 1.1.0起,DBAppender
打开的所有连接都将代表您关闭。因此,只要您使用的是Logback> = 1.1.0版本,就不必显式关闭DBAppender
打开的任何连接。
重新:
如果我有几个记录器 - 我可以为它们创建一个dpappender吗?因为我注意到我们需要添加到dbAppender和connectionSource上下文,比如...
您不必为每个记录器调用这些行...
connectionSource.setContext(logger.getLoggerContext());
dbAppender.setContext(logger.getLoggerContext());
...因为每个记录器共享相同的LoggerContext
所以你应该只调用上面一行。