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

时间:2018-01-30 11:26:51

标签: java logging logback

我们在项目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());

所有记录器的上下文是否相同,我只需要从其中一个记录器中添加它?

1 个答案:

答案 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所以你应该只调用上面一行。