gpt4 book ai didi

java - 关闭以编程方式创建的 Logback DBAppender

转载 作者:行者123 更新时间:2023-12-02 11:41:28 25 4
gpt4 key购买 nike

我们在项目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 打开的任何连接。

回复:

If I have several loggers - can i create one dpappender for all of them? Cause i noticed that we need to add to dbAppender and connectionSource context, like ...

您不必为每个记录器调用这些行...

connectionSource.setContext(logger.getLoggerContext());
dbAppender.setContext(logger.getLoggerContext());

...由于每个记录器共享相同的 LoggerContext,因此您应该只调用上述行一次。

关于java - 关闭以编程方式创建的 Logback DBAppender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48520274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com