我们将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的连接?
答案 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();
}