JBoss 7.2.0不加载我的log4j

时间:2013-09-29 13:08:44

标签: java jboss log4j web.xml

我刚刚从Tomcat切换到JBoss,我的第一大问题是我无法在JBoss上部署的Web应用程序中准备自己的log4j.xml文件。它在应用程序启动期间未加载。我有日志,但它来自默认的JBoss日志配置

我发现在最新的JBoss 7.2.0中,log4j应该可以开箱即用。但它不适合我。我尝试了用Google搜索过的所有技巧/提示/黑客 - 而且非常沮丧。

我想在我的项目中的某个地方安装log4j.xml。理想情况下,我不想修改jboss服务器目录中的配置,因为它必须工作 - 不仅在我的本地,而且在其他环境中(例如openshift)。

的pom.xml:

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.5</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
  <scope>provided</scope>
</dependency>

结构:

WEB-INF / classes / log4j.xml - 包含垃圾数据以检查JBoss是否读取它(加载此文件后应抛出异常)。我还尝试将此文件复制到/ resources,/,WEB-INF。

WEB-INF / JBoss的部署-structure.xml

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
  <deployment>
    <dependencies>
      <module name="org.slf4j"/>
      <module name="org.apache.log4j" />
    </dependencies>
  </deployment>
</jboss-deployment-structure>

我是否需要加载我的log4j文件的外部加载程序?

更新#1 WEB-INF /类/的log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' debug="true">
  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
    </layout>
  </appender>
  <root>
    <priority value ="debug" />
    <appender-ref ref="STDOUT" />
  </root>
</log4j:configuration>

我的代码中的某处:

private static final Logger log = LoggerFactory.getLogger(TaskResource.class);
...
log.debug("deubg");

3 个答案:

答案 0 :(得分:3)

我不知道为什么在JBoss中这么难,但最后我找出了所有的配置。 (我从一开始就非常接近)。

要在JBoss应用程序中拥有自己的log4j.xml,您必须执行以下步骤:

  • 将log4j.xml放入WEB-INF / classes
  • 将jboss log4j排除在外:

WEB-INF / JBoss的部署-structure.xml:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
  <deployment>
    <exclusions>
      <module name="org.apache.log4j" />
    </exclusions>
  </deployment>
</jboss-deployment-structure>
  • 将log4j.jar复制到WEB-INF / lib
  • 设置依赖关系

pom.xml:

<dependency>
  <artifactId>log4j</artifactId>
  <groupId>log4j</groupId>
  <version>1.2.17</version>
  <scope>provided</scope>
</dependency>

如果您需要在控制台中安装日志,请设置:

-Dorg.jboss.as.logging.per-deployment=false

答案 1 :(得分:1)

尝试在WEB-INF / jboss-deployment-structure.xml文件中添加以下内容:

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-deployment-structure>
   <deployment>
     <exclusions>
       <module name="org.apache.log4j" />
     </exclusions>
   </deployment>
 </jboss-deployment-structure> 

答案 2 :(得分:0)

不,您只需要在应用程序CLASSPATH中使用log4j.xml。

  

包含垃圾数据以检查JBoss是否读取它

我不明白这一点。你是说你尝试在CLASSPATH中使用一个有效的XML并且它不起作用,所以你认为垃圾版本会更好吗?

将真实的东西放在WEB-INF / classes中,看它是否有效。

您不需要单独的装载程序。你做错了什么。它只是记录;这不是很难。

也许这会有所帮助:

https://community.jboss.org/thread/171813?start=0&tstart=0&_sscc=t

相关问题