我们正在从log4j迁移到几个Web应用程序的logback.在关闭我们的应用程序时,我们目前致电:
org.apache.log4j.LogManager.shutdown();
Run Code Online (Sandbox Code Playgroud)
应该刷新所有异步日志记录并关闭所有外部资源(文件,套接字).
在logback中是否存在类似的东西,或者在关闭时是否以某种方式自动刷新?
麦克风
这是一个简单的方法:
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();
}
Run Code Online (Sandbox Code Playgroud)
似乎只是添加<shutdownHook/>到配置应该停止上下文.
来自logback docs:
<configuration>
<!-- in the absence of the class attribute, assume
ch.qos.logback.core.hook.DelayingShutdownHook -->
<shutdownHook/>
....
</configuration>
Run Code Online (Sandbox Code Playgroud)
ShutdownHook实现在指定的延迟后停止Logback上下文.默认延迟为0 ms(零).
我不知道像 log4j 这样的整体管理器关闭,但当使用 ServletContextListener 销毁它们的上下文时,我关闭了所有单独的上下文记录器,如下所示:
ContextSelector selector = StaticLoggerBinder.getSingleton().getContextSelector();
LoggerContext context = selector.detachLoggerContext(contextName);
if (context != null) {
Logger logger = context.getLogger(Logger.ROOT_LOGGER_NAME);
context.reset();
} else {
System.err.printf("No context named %s was found", contextName);
}
Run Code Online (Sandbox Code Playgroud)
另外,LoggerContext.stop() 是可用的,并且在内部执行一些相同的功能,但我不使用它,所以我无法评论它是否比重置更好。
| 归档时间: |
|
| 查看次数: |
6170 次 |
| 最近记录: |