我们在项目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());
所有记录器的上下文是否都相同,我只需要从其中之一添加它?
最佳答案
从Logback v 1.1.0开始,由DBAppender
打开的所有连接都代表您关闭。因此,只要使用的是Logback> = 1.1.0版本,就不必显式关闭DBAppender
打开的任何连接。
重新这样:
如果我有多个记录器-我可以为所有记录器创建一个dpappender吗?因为我注意到我们需要添加到dbAppender和connectionSource上下文,例如...
您不必为每个记录器调用这些行...
connectionSource.setContext(logger.getLoggerContext());
dbAppender.setContext(logger.getLoggerContext());
...由于每个记录器共享相同的
LoggerContext
,因此您仅应调用上述各行一次。关于java - 关闭以编程方式创建的Logback DBAppender,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48520274/