jboss 服务器无法使用 Log4J 加载 WAR
jboss server cannot load WAR with Log4J
我正在尝试在本地 jboss EAP 6.1 服务器正在 运行 的 Maven 项目中使用 Log4J。这是我的 pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.company</groupId>
<artifactId>pro</artifactId>
<version>0.0.2-SNAPSHOT</version>
</parent>
<groupId>com.company.test</groupId>
<artifactId>project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>com.company.test.project</name>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.5</version>
</dependency>
</dependencies>
</project>
我有一个 log4j.xml 文件放在 webapp\WEB-INF-classes 下。似乎 jboss 在加载项目时遇到问题,因为 log4j.xml 包含一个 SMTP 附加程序:
<appender name="EMAIL" class="org.apache.log4j.net.SMTPAppender">
<param name="From" value="support@company.com"/>
<param name="SMTPHost" value="smtp1.server.com"/>
<param name="Subject" value="Fatal Error"/>
<param name="To" value="user@company.com"/>
<param name="Threshold" value="FATAL" />
</appender>
当我尝试在本地 运行 项目时,出现此错误:
15:07:17,389 ERROR [org.jboss.msc.service.fail] (MSC service thread
1-2) MSC000001: Failed to start service
jboss.deployment.unit."com.company.test.project.war".POST_MODULE:
org.jboss.msc.service.StartException in service
jboss.deployment.unit."com.company.test.project.war".POST_MODULE:
JBAS018733: Failed to process phase POST_MODULE of deployment
"com.company.test.project.war" at
org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:127)
[jboss-as-server-7.2.1.Final-redhat-10.jar:7.2.1.Final-redhat-10] at
org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
[jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1] at
org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
[jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1] at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
[rt.jar:1.7.0_55] at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
[rt.jar:1.7.0_55] at java.lang.Thread.run(Thread.java:745)
[rt.jar:1.7.0_55] Caused by: java.lang.NoClassDefFoundError:
javax/mail/internet/AddressException at
java.lang.Class.getDeclaredConstructors0(Native Method)
[rt.jar:1.7.0_55] at
java.lang.Class.privateGetDeclaredConstructors(Class.java:2493)
[rt.jar:1.7.0_55] at java.lang.Class.getConstructor0(Class.java:2803)
[rt.jar:1.7.0_55] at java.lang.Class.newInstance(Class.java:345)
[rt.jar:1.7.0_55] at
org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:247)
at
org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:176)
at
org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:191)
at
org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:523)
at
org.apache.log4j.xml.DOMConfigurator.parseRoot(DOMConfigurator.java:492)
at
org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:1001)
at
org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:867)
at
org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:794)
at
org.jboss.as.logging.LoggingDeploymentUnitProcessor.configure(LoggingDeploymentUnitProcessor.java:295)
[jboss-as-logging-7.2.1.Final-redhat-10.jar:7.2.1.Final-redhat-10] at
org.jboss.as.logging.LoggingDeploymentUnitProcessor.processDeploymentLogging(LoggingDeploymentUnitProcessor.java:176)
[jboss-as-logging-7.2.1.Final-redhat-10.jar:7.2.1.Final-redhat-10] at
org.jboss.as.logging.LoggingDeploymentUnitProcessor.deploy(LoggingDeploymentUnitProcessor.java:81)
[jboss-as-logging-7.2.1.Final-redhat-10.jar:7.2.1.Final-redhat-10] at
org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:120)
[jboss-as-server-7.2.1.Final-redhat-10.jar:7.2.1.Final-redhat-10] ...
5 more Caused by: java.lang.ClassNotFoundException:
javax.mail.internet.AddressException from [Module
"org.jboss.log4j.logmanager:main" from local module loader @b7e2544
(finder: local module finder @6c09941 (roots:
C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules,C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules\system\layers\soa,C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules\system\layers\sramp,C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules\system\layers\base))]
at
org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:196)
[jboss-modules.jar:1.2.2.Final-redhat-1] at
org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:444)
[jboss-modules.jar:1.2.2.Final-redhat-1] at
org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:432)
[jboss-modules.jar:1.2.2.Final-redhat-1] at
org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:374)
[jboss-modules.jar:1.2.2.Final-redhat-1] at
org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:119)
[jboss-modules.jar:1.2.2.Final-redhat-1] ... 21 more
15:07:17,389 ERROR [org.jboss.as.server] (DeploymentScanner-threads -
1) JBAS015870: Deploy of deployment "com.company.test.project.war" was
rolled back with the following failure message: {"JBAS014671: Failed
services" =>
{"jboss.deployment.unit.\"com.company.test.project.war\".POST_MODULE"
="org.jboss.msc.service.StartException in service jboss.deployment.unit.\"com.company.test.project.war\".POST_MODULE:
JBAS018733: Failed to process phase POST_MODULE of deployment
\"com.company.test.project.war\"
Caused by: java.lang.NoClassDefFoundError: javax/mail/internet/AddressException
Caused by: java.lang.ClassNotFoundException: javax.mail.internet.AddressException from [Module
\"org.jboss.log4j.logmanager:main\" from local module loader @b7e2544
(finder: local module finder @6c09941 (roots:
C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules,C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules\system\layers\soa,C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules\system\layers\sramp,C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules\system\layers\base))]"}}
编辑:这是我创建的 jboss-deployment-structure.xml 文件:
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclusions>
<module name="org.apache.log4j" />
</exclusions>
</deployment>
</jboss-deployment-structure>
EAP 6.3 中修复了一个错误,该错误将正确的依赖项添加到 EAP 中使用的 log4j 模块。如果您添加以下依赖项 $JBOSS_HOME/modules/system/layers/base/org/jboss/log4j/logmanager/main/module.xml
它应该会修复它。
<dependencies>
<module name="javax.api"/>
<module name="javax.mail.api" optional="true"/>
<module name="javax.jms.api" optional="true"/>
<module name="org.dom4j" optional="true"/>
<module name="org.jboss.logmanager"/>
<module name="org.jboss.modules"/>
</dependencies>
另一种选择是使用 jboss-deployment-structure.xml
排除 log4j 并使用您提供的版本。
我正在尝试在本地 jboss EAP 6.1 服务器正在 运行 的 Maven 项目中使用 Log4J。这是我的 pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.company</groupId>
<artifactId>pro</artifactId>
<version>0.0.2-SNAPSHOT</version>
</parent>
<groupId>com.company.test</groupId>
<artifactId>project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>com.company.test.project</name>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.5</version>
</dependency>
</dependencies>
</project>
我有一个 log4j.xml 文件放在 webapp\WEB-INF-classes 下。似乎 jboss 在加载项目时遇到问题,因为 log4j.xml 包含一个 SMTP 附加程序:
<appender name="EMAIL" class="org.apache.log4j.net.SMTPAppender">
<param name="From" value="support@company.com"/>
<param name="SMTPHost" value="smtp1.server.com"/>
<param name="Subject" value="Fatal Error"/>
<param name="To" value="user@company.com"/>
<param name="Threshold" value="FATAL" />
</appender>
当我尝试在本地 运行 项目时,出现此错误:
15:07:17,389 ERROR [org.jboss.msc.service.fail] (MSC service thread
1-2) MSC000001: Failed to start service
jboss.deployment.unit."com.company.test.project.war".POST_MODULE:
org.jboss.msc.service.StartException in service
jboss.deployment.unit."com.company.test.project.war".POST_MODULE:
JBAS018733: Failed to process phase POST_MODULE of deployment
"com.company.test.project.war" at
org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:127)
[jboss-as-server-7.2.1.Final-redhat-10.jar:7.2.1.Final-redhat-10] at
org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
[jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1] at
org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
[jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1] at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
[rt.jar:1.7.0_55] at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
[rt.jar:1.7.0_55] at java.lang.Thread.run(Thread.java:745)
[rt.jar:1.7.0_55] Caused by: java.lang.NoClassDefFoundError:
javax/mail/internet/AddressException at
java.lang.Class.getDeclaredConstructors0(Native Method)
[rt.jar:1.7.0_55] at
java.lang.Class.privateGetDeclaredConstructors(Class.java:2493)
[rt.jar:1.7.0_55] at java.lang.Class.getConstructor0(Class.java:2803)
[rt.jar:1.7.0_55] at java.lang.Class.newInstance(Class.java:345)
[rt.jar:1.7.0_55] at
org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:247)
at
org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:176)
at
org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:191)
at
org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:523)
at
org.apache.log4j.xml.DOMConfigurator.parseRoot(DOMConfigurator.java:492)
at
org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:1001)
at
org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:867)
at
org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:794)
at
org.jboss.as.logging.LoggingDeploymentUnitProcessor.configure(LoggingDeploymentUnitProcessor.java:295)
[jboss-as-logging-7.2.1.Final-redhat-10.jar:7.2.1.Final-redhat-10] at
org.jboss.as.logging.LoggingDeploymentUnitProcessor.processDeploymentLogging(LoggingDeploymentUnitProcessor.java:176)
[jboss-as-logging-7.2.1.Final-redhat-10.jar:7.2.1.Final-redhat-10] at
org.jboss.as.logging.LoggingDeploymentUnitProcessor.deploy(LoggingDeploymentUnitProcessor.java:81)
[jboss-as-logging-7.2.1.Final-redhat-10.jar:7.2.1.Final-redhat-10] at
org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:120)
[jboss-as-server-7.2.1.Final-redhat-10.jar:7.2.1.Final-redhat-10] ...
5 more Caused by: java.lang.ClassNotFoundException:
javax.mail.internet.AddressException from [Module
"org.jboss.log4j.logmanager:main" from local module loader @b7e2544
(finder: local module finder @6c09941 (roots:
C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules,C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules\system\layers\soa,C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules\system\layers\sramp,C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules\system\layers\base))]
at
org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:196)
[jboss-modules.jar:1.2.2.Final-redhat-1] at
org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:444)
[jboss-modules.jar:1.2.2.Final-redhat-1] at
org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:432)
[jboss-modules.jar:1.2.2.Final-redhat-1] at
org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:374)
[jboss-modules.jar:1.2.2.Final-redhat-1] at
org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:119)
[jboss-modules.jar:1.2.2.Final-redhat-1] ... 21 more
15:07:17,389 ERROR [org.jboss.as.server] (DeploymentScanner-threads -
1) JBAS015870: Deploy of deployment "com.company.test.project.war" was
rolled back with the following failure message: {"JBAS014671: Failed
services" =>
{"jboss.deployment.unit.\"com.company.test.project.war\".POST_MODULE"
="org.jboss.msc.service.StartException in service jboss.deployment.unit.\"com.company.test.project.war\".POST_MODULE:
JBAS018733: Failed to process phase POST_MODULE of deployment
\"com.company.test.project.war\"
Caused by: java.lang.NoClassDefFoundError: javax/mail/internet/AddressException
Caused by: java.lang.ClassNotFoundException: javax.mail.internet.AddressException from [Module
\"org.jboss.log4j.logmanager:main\" from local module loader @b7e2544
(finder: local module finder @6c09941 (roots:
C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules,C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules\system\layers\soa,C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules\system\layers\sramp,C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules\system\layers\base))]"}}
编辑:这是我创建的 jboss-deployment-structure.xml 文件:
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclusions>
<module name="org.apache.log4j" />
</exclusions>
</deployment>
</jboss-deployment-structure>
EAP 6.3 中修复了一个错误,该错误将正确的依赖项添加到 EAP 中使用的 log4j 模块。如果您添加以下依赖项 $JBOSS_HOME/modules/system/layers/base/org/jboss/log4j/logmanager/main/module.xml
它应该会修复它。
<dependencies>
<module name="javax.api"/>
<module name="javax.mail.api" optional="true"/>
<module name="javax.jms.api" optional="true"/>
<module name="org.dom4j" optional="true"/>
<module name="org.jboss.logmanager"/>
<module name="org.jboss.modules"/>
</dependencies>
另一种选择是使用 jboss-deployment-structure.xml
排除 log4j 并使用您提供的版本。