gpt4 book ai didi

java - Log4j2:如何说服它 log4j-core.jar 的类确实存在?

转载 作者:行者123 更新时间:2023-12-01 17:31:46 25 4
gpt4 key购买 nike

我正在将 Java 应用程序构建到单个可执行 .jar 文件中,以便解压应用程序所依赖的所有必需的 jar 文件,并将其所有内容与实际应用程序的类文件一起包含到单个 .jar 文件中(这是一个恕我直言,经典 ant jar 任务的一个非常方便的功能。这样就不需要处理或分发多个 jar 或嵌套的 .jar 等。

到目前为止,这种方法工作得很好,但现在我从 log4j(v1) 升级到 log4j2(我实际上使用的是 slf4j-API,但下面的 log4j 版本发生了变化)。

自从升级后,我的方法似乎不再起作用,但在运行时我不断收到错误消息:错误 StatusLogger Log4j2 找不到日志记录实现。请将 log4j-core 添加到类路径中。使用 SimpleLogger 登录控制台....

但是,所有 log4j-core-version.jar 的类文件包含在我的.jar 文件中!显然,某些代码尝试验证原始 .jar 文件是否存在(并且没有意识到所包含的类确实存在并且位于类路径上),然后大喊大叫。

我正在使用 log4j-slf4j-impl-2.13.1.jar、slf4j-api-1.7.25.jar、log4j-api-2.13.1.jar 和 log4j-core-2.13.1.jar (或者更确切地说- 如上所述 - 只是它们的内容,而不是实际的 .jar)。

有没有办法避免这种情况并告诉日志代码不要打扰 re.那个.jar 的存在?我不想因为这个而不得不处理并且总是不得不分发两个 .jar 文件。

最佳答案

Jar 文件不仅仅包含类。它们还可以包含资源。 Log4j 2 Plugin 系统使用一个文件来标识 jar 中的所有插件,而 java.util.ServiceLoader 使用一个文件来标识服务的所有实现。如果没有这些文件,事情就会崩溃。

假设您正在使用 Maven 阴影插件,您需要使用 log4j shade transformer用于识别插件和 ServicesResourceTransformer .

关于java - Log4j2:如何说服它 log4j-core.jar 的类确实存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61108395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com