【问题标题】:Log4j writing to stdout on jboss 7Log4j 在 jboss 7 上写入标准输出
【发布时间】:2012-11-07 08:50:08
【问题描述】:

在我的 Web 应用程序中,我使用自己的 log4j.xml 文件重新初始化 log4j。

我已经使用以下 jboss-deployment-structure.xml 排除了我的 log4j.jar

<jboss-deployment-structure>
<deployment>
    <!-- Exclusions allow you to prevent the server from automatically adding some dependencies -->
    <exclusions>
        <module name="org.apache.log4j" />
    </exclusions>
</deployment>

重新初始化后,log4j 将所有内容记录在标准输出中

在 jboss 5 中我使用了这个 JVM 参数

-Dorg.jboss.logging.Log4jService.catchSystemOut=false

对于 jboss 7,这是行不通的。 如何将 log4j 配置为不登录到标准输出?

【问题讨论】:

  • 你的配置中有 ConsoleAppendar 吗?
  • 是的,我愿意。我使用与 jboss 5 相同的配置。如果我删除它,jboss 会停止控制台日志记录。它曾经在 jboss 5 上运行良好
  • AFAIK 你不能将 log4j 配置为我们的标准输出。您是否使用了没有等效处理程序的特定附加程序?
  • 不,我不使用没有等效处理程序的附加程序。

标签: log4j jboss7.x


【解决方案1】:

如果您没有使用特殊的附加程序,您可能最好使用应用程序服务器附带的日志记录配置。它的优点是允许您从其管理界面(Web 控制台、CLI 等)进行运行时更改。

您仍然可以在应用程序中使用 log4j 作为您的日志记录外观,但您只需从应用程序服务器管理记录器和处理程序(附加器)。

【讨论】:

  • 我们的应用必须支持不同的应用服务器(weblogic、webshphere)。它不仅仅是jboss。这就是我们在 EAR 中包含 log4j 并使用我们的 log4j.xml 重新初始化它的原因。我们的一些客户也有他们自己的 log4j.xml,它也必须得到支持。我认为 log4j 只能初始化一次。当我们再次初始化它时,它认为有问题并将所有内容转发到标准输出。我们使用提到的属性修复了 jboss 5 的相同问题。我想唯一的解决方法是在standalone.xml中修改控制台附加程序的格式化程序
  • log4j 没有在 JBoss 应用服务器中使用。可能存在依赖关系,但应用程序服务器本身没有。但是,它确实包装了标准输出,这可能就是您所看到的。它仍然应该打印日志消息,只是它们的格式可能不像你期望的那样。
【解决方案2】:

我不得不排除以下两个模块:

 <exclusions>
   <module name="org.apache.log4j" />
   <module name="org.jboss.log4j.logmanager" />
 </exclusions>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-25
    • 2012-06-08
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多