我有一个使用slf4j和log4j的Web应用程序。它部署在Wildfly 9上。不幸的是,我必须使用第三方库以编程方式重新配置log4j。它正在调用PropertyConfigurator.configure();
,不可能使用log4j-over-slf4j。根据{{3}}:
当应用程序调用桥中不存在的log4j组件时,log4j-over-slf4j模块将不起作用。例如,当应用程序代码直接引用log4j appenders,过滤器或PropertyConfigurator时,log4j-over-slf4j将不足以替代log4j。
我试图将jars放入jboss模块,但是库仍然会改变我的配置。模块是否可以将库的日志记录功能与Web应用程序之一隔离开来?或者别的什么?
编辑:我也尝试使用不同的类加载器(使用自定义log4j)(使用jboss-deployment-structure.xml)
<?xml version="1.0"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclusions>
<module name="org.apache.log4j" slot="main"/>
</exclusions>
</deployment>
</jboss-deployment-structure>
并在模块中使用wildfly提供的log4j,但是当库尝试配置其log4j时,我会收到以下错误:
20:51:32,719错误[stderr](默认任务-1)log4j:错误“org.apache.log4j.RollingFileAppender”对象不能分配给“org.apache.log4j.Appender”变量。 20:51:32,721 ERROR [stderr](默认任务-1)log4j:ERROR类“org.apache.log4j.Appender”已加载 20:51:32,723 ERROR [stderr](默认任务-1)log4j:ERROR [Module“ModuleClassLoader for module”org.jboss.log4j.logmanager:main“来自本地模块加载器@ 66d1af89(finder:local module finder @ 8646db9(roots: D:\ wildfly-9.0.2.Final \ modules,D:\ wildfly-9.0.2.Final \ modules \ system \ layers \ base))]而对象类型 20:51:32,725 ERROR [stderr](默认任务-1)log4j:ERROR“org.apache.log4j.RollingFileAppender”由[ModuleClassLoader for Module“deployment.my-application-1.0.0-SNAPSHOT.war:main加载“来自服务模块加载器。”
edit2:似乎doc log4j uses。因此,一种可能性是thread context class loader。至少,类加载相关的异常在使用时会消失。但问题仍然存在,如果这是一个“好”的解决方案......
此外,根据to disable it,框架不应使用TCCL。