【问题标题】:JBoss 5.0.1: log4j.properties file not taking effect in EARJBoss 5.0.1:log4j.properties 文件在 EAR 中未生效
【发布时间】:2010-08-18 16:54:51
【问题描述】:

我无法使 log4j.properties 文件中的设置生效。我已经遵循了以下论坛讨论中的建议:

http://community.jboss.org/message/198690#198690

这是我的 log4j.properties 文件(在 EAR 的根目录中):

#
# The root logger is set to INFO by default.
# This level can be changed programmatically at runtime.
#
log4j.rootLogger=INFO, stdout, file
# use the hibernate appender for audit logs.
log4j.logger.auditLogger.com.anfscd=INFO, hibernate, HBSS
# Console appender.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p %d %c %x - %m %n
log4j.appender.stdout.Threshold=WARN
# Use this ConversionPattern to display thread.
#log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
# Daily rolling file appender.
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.File=c:/anfscd/log/anfscd-server.log
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.layout.ConversionPattern=%-5p %d %c %x - %m %n
# Use this ConversionPattern to display thread.
#log4j.appender.file.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
# Hibernate appender
log4j.appender.hibernate=com.anfscd.common.util.database.log.HibernateAppender
log4j.appender.hibernate.sessionServiceClass=com.anfscd.cmd.model.util.persistence.HibernateHelper
log4j.appender.hibernate.loggingEventClass=com.anfscd.cmd.model.audit.AuditLogRecord
# direct log messages to windows system logs #
log4j.appender.HBSS=org.apache.log4j.nt.NTEventLogAppender
log4j.appender.HBSS.Source=Project Name
log4j.appender.HBSS.layout=org.apache.log4j.PatternLayout
log4j.appender.HBSS.layout.ConversionPattern=%-5p %d %c %x - %m %n
# suppress org.hibernate messages
log4j.logger.org.hibernate=ERROR, stdout

这是我的 jboss-app.xml(在 [ear]/META-INF 中):

<?xml version="1.0" encoding="UTF-8"?>
<jboss-app>
  <module-order>strict</module-order>
  <loader-repository>
    com.anfscd:loader=AnfscdLoader
    <loader-repository-config>
      java2ParentDelegation=false
    </loader-repository-config>
  </loader-repository>
</jboss-app>

我们使用 Hibernate 进行持久化,它在输出控制台中非常冗长。除非出现错误,否则我不想看到 Hibernate 控制台输出。

顺便说一句,我正在使用 log4j-1.2.15.jar。

【问题讨论】:

    标签: java log4j jboss5.x


    【解决方案1】:

    哇!说说追尾吧!

    首先,底线是,在 JBoss 5.x 中运行的 Log4J 确实会看到并处理 EAR 根目录中的 log4j.properties 文件。

    ...但前提是没有其他东西可以干扰它。例如,如果您要将 log4j.xml 与 log4j.properties 一起打包到 EAR 的根目录中,则 Log4J 默认使用 .xml 文件而不是 .properties 文件。它从 log4j.xml 加载配置,甚至不费心去寻找 log4j.properties。

    唉,那个特定的场景不是我的问题。

    说完了,我的问题是一个包含自己的 log4j.properties 文件的 3rd-party JAR。与 .xml 文件一样,如果 Log4J 偶然发现一个 log4j.properties,它不会费心去寻找另一个。好吧,无论出于何种原因,在 JBoss 4.2.x 中,Log4J 将 EAR 根目录中的 log4j.properties 置于 JAR 中。相比之下,在 JBoss 5.x 中,Log4J 采用 JAR 中的 log4j.properties 文件,而不是 EAR 根目录中的文件。

    我已经从 3rd-party JAR 中删除了 log4j.properties 文件,一切都像一个魅力一样工作。

    我通过启用 Log4J 的调试模式偶然发现了问题的原因。仅供参考,您可以通过使用开关 -Dlog4j.debug 启动 JBoss 或在 jboss-log4j.xml 中的 log4j:configuration 标记中设置 debug="false" 来做到这一点。

    【讨论】:

      【解决方案2】:

      AFAIK 是耳朵的根文件夹,未添加到类路径中,因此是不可见的属性文件。

      一个更好的位置是在一个公共 jar 文件的根目录中或在主 war 文件的 WEB-INF/classes 中。

      【讨论】:

      • 我在 EAR 的根目录中有一个 jndi.properties,它正在处理中。这就是让我如此困惑的原因。为什么一个属性文件被处理而另一个被忽略?
      • 对不起:我现在和你一样困惑...... FWIW 我也花了很多小时试图找出 log4j 使用的是哪个配置文件......祝你好运!
      • 没有汗水。感谢分享。
      猜你喜欢
      • 2010-10-18
      • 2015-02-17
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 2012-11-15
      • 1970-01-01
      相关资源
      最近更新 更多