重新登录不会关闭dbappender的数据源连接

时间:2018-06-22 05:36:00

标签: java logback tomcat8

我们将Logback 1.1.7用于我们的一个Web应用程序(托管在Tomcat 8上)。当我们使用Tomcat管理器停止Web应用程序时,未关闭DBappender的数据连接。我们需要重新启动完整的Tomcat服务以释放Logback的数据库连接。

Tomcat连接池用于管理与数据库的连接。

我们使用xml文件配置附加程序,如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
        <connectionSource class="ch.qos.logback.core.db.JNDIConnectionSource">
            <jndiLocation>java:comp/env/jdbc/database</jndiLocation>
        </connectionSource>
    </appender>

    <root level="ALL">
        <appender-ref ref="DB" />
    </root>

</configuration>

在代码中,我们通过以下方式调用记录器:

Logger logger = LoggerFactory.getLogger("defaultLogger");

在停止应用程序时,有什么方法可以手动关闭Logback的连接?

1 个答案:

答案 0 :(得分:1)

在配置中添加<shutdownhook>,您可以手动或自动关闭所有连接并刷新所有异步日志记录。

登录配置:

<configuration>
   <!-- in the absence of the class attribute, assume 
   ch.qos.logback.core.hook.DelayingShutdownHook -->
   <shutdownHook/>
  .... 
</configuration>

您可以致电

org.apache.log4j.LogManager.shutdown();

这是示例代码:

import org.slf4j.ILoggerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ch.qos.logback.classic.LoggerContext;

...

ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory();
// Check for logback implementation of slf4j
if (loggerFactory instanceof LoggerContext) {
    LoggerContext context = (LoggerContext) loggerFactory;
    context.stop();
}