首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么由两个类加载器加载log4j类?

为什么由两个类加载器加载log4j类?
EN

Stack Overflow用户
提问于 2022-02-02 13:36:34
回答 1查看 327关注 0票数 0

我有一个应用程序的maven项目,我在WildFly服务器中运行该项目。该项目具有log4j依赖关系:

代码语言:javascript
运行
复制
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.17.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.17.1</version>
</dependency>

我想让LoggerContext像这样:

代码语言:javascript
运行
复制
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);

但是,这会导致ClassCastException:

代码语言:javascript
运行
复制
class org.apache.logging.log4j.core.LoggerContext cannot be cast to class org.apache.logging.log4j.core.LoggerContext (org.apache.logging.log4j.core.LoggerContext is in unnamed module of loader 'deployment.WEB.war' @6e285ef6; org.apache.logging.log4j.core.LoggerContext is in unnamed module of loader 'deployment.WEB.war' @239cb91f)

经过一些调试后,我发现问题在于类LoggerContext是通过两个不同的类加载器加载的。这怎么可能?起初,我认为这些依赖项会有两种不同的声明,但这可能不是问题所在。(我已将版本更改为2.17.0,并在两个class.getPackage类上调用LoggerContext ().getSpecificationVersion())。对于这两个类,版本已经更改)。

类被加载两次的原因是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-15 15:06:16

好的,因为野生蝇中有log4j库,所以这些类被加载了两次。

如何避免这种情况:向WEB添加配置以将日志库从通配符中排除在外:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
    <exclude-subsystems>
        <subsystem name="logging"/>
    </exclude-subsystems>
    <exclusions>
        <module name="org.apache.commons.logging"/>
        <module name="org.apache.log4j"/>
        <module name="org.jboss.logging"/>
        <module name="org.jboss.logging.jul-to-slf4j-stub"/>
        <module name="org.jboss.logmanager"/>
        <module name="org.jboss.logmanager.log4j"/>
        <module name="org.slf4j"/>
        <module name="org.slf4j.impl"/>
    </exclusions>
</deployment>
</jboss-deployment-structure>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70956603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档