Log4j2 尝试加载不再存在的类

问题描述 投票:0回答:1

我正在使用 Maven 构建 Java 应用程序。我最近将 Log4j2 库(log4j-api 和 log4j-core)添加到我的 pom.xml 文件中的依赖项中。这使我能够在我的应用程序上执行适当的日志记录。

不幸的是,自从添加这些库后,我的应用程序无法正常运行。每次启动时我都会看到以下内容:

WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
WARN StatusConsoleListener No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2

我确实有一个可供应用程序使用的 log4j.xml 文件,因此我必须得出结论,缺少 getCallerClass 导致无法找到它。然而,令我困扰的是,当我在互联网上查找失败原因时,我发现从 Java 8 开始,sun.reflect.Reflection.getCallerClass 已从 JDK 中删除。由于我使用的是 Java 17 ,并且我的依赖项都与 Java 17 兼容(包括 V2.20.0 的 log4j 库),它们根本不应该尝试加载 sun.reflect.Reflection.getCallerClass!

我已经看过很多文档解释 Java 8+ 中如何不支持 sun.reflect.Reflection.getCallerClass,但是我无法获得任何连贯的信息来说明为什么 log4j2 一直坚持尝试加载此类或如何阻止这样做。有人可以告诉我如何阻止 log4j2 尝试加载这个类吗???

java maven log4j2
1个回答
0
投票

我已经解决了问题。

事实证明,log4j 库版本不是最新的。检查存储库后,我将 log4j-api 和 log4j-core 从 V2.20.0 升级到 V2.22.0。我不明白为什么,但这样做消除了 getCallerClass 警告。

© www.soinside.com 2019 - 2024. All rights reserved.