我遇到了一个奇怪的情况,类似地在LogManager.getLogger stalls Application for ~10-30 Seconds when using JDK8:中描述过,但没有提出解决方案。
事情是通过
初始化记录器final Logger logger = LogManager.getLogger(MyClass.class.getSimpleName());
将我的应用程序拖延了近7秒(在最新的MacBook Pro 15“2017上)如果要么禁用WiFi,要么我通过我的iPhone进行连接。 但是,如果我通过WiFi(没有网络共享)有一个可用的Internet连接,则log4j初始化可在1.5秒内完成。 这是一种非常奇怪的行为。首先,我认为log4j尝试访问Internet上的资源并在几秒钟后超时,但是又一次:为什么当我进行网络共享并因此可以访问Internet时出现相同的行为?
进一步调试时,我发现这种方法花了这么长时间:
public static LoggerContext getContext(final boolean currentContext) {
// TODO: would it be a terrible idea to try and find the caller ClassLoader here?
try {
return factory.getContext(FQCN, null, null, currentContext, null, null);
} catch (final IllegalStateException ex) {
LOGGER.warn(ex.getMessage() + " Using SimpleLogger");
return new SimpleLoggerContextFactory().getContext(FQCN, null, null, currentContext, null, null);
}
}
特别是:
factory.getContext(FQCN, null, null, currentContext, null, null);
有没有人知道为什么会发生这种情况以及如何解决这个问题?
答案 0 :(得分:0)
当我将程序从PC转移到带有JDK版本1.8.0_144或1.8.0_102的MBP时,我遇到了同样的问题。 我认为这是JDK for Mac的一个错误。
U可以解决它,使用JDK版本1.8.0_31。