java - JBoss 7.2.0 不加载我的 log4j

标签 java jboss log4j web.xml

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

我发现在最新的 JBoss 7.2.0 中 log4j 应该可以开箱即用。但这不适合我。我尝试了我在谷歌上搜索到的所有技巧/提示/黑客 - 但它非常令人沮丧。

我希望在我的项目中的某个地方有 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-deployment-struct.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/classes/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");

最佳答案

我不知道为什么这在 JBoss 中如此困难,但最终我弄清楚了所有配置。 (我从一开始就非常接近)。

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

  • 将 log4j.xml 放入 WEB-INF/classes
  • 像这样排除 jboss log4j:

WEB-INF/jboss-deployment-struct.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

关于java - JBoss 7.2.0 不加载我的 log4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19078391/

相关文章:

java - 使用数据库作为我的上下文绑定(bind)而不是文件系统

java - [Java][Jboss]classToLaunch 不能为空

java - 有关于 Raspberry PI 的 Java 经验吗?

java - 重写 Camel 和 log4j

java - Log4j 似乎不适用于 Spring Boot

java - 如何自定义java日志文件以仅包含最多N条日志记录而不是大小(以字节为单位)

java - 托管使用Java和Rails代码的Web应用程序?

java - 通过Java执行CMD长命令

java - 为什么 getFacesContext() 变为 null

java - jnlp 控制台语句重定向到服务器