2

我无法使 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。

4

2 回答 2

4

哇!谈论追逐你的尾巴!

首先,底线是,在 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 的调试模式,我偶然发现了问题的原因。仅供参考,您可以通过使用开关启动 JBoss-Dlog4j.debug或在 jboss-log4j.xmldebug="false"中的log4j:configuration标签中设置来做到这一点。

于 2010-08-23T22:19:34.847 回答
0

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

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

于 2010-08-18T17:04:01.303 回答