【发布时间】:2012-07-01 08:37:00
【问题描述】:
我刚刚在工作中挑选了一个现有的 Web 应用程序,它应该使用 Log4J 记录其活动。我已经完全按照我被告知的方式配置了我的工作区,并且其他所有内容(数据库连接、身份验证等)都可以正常工作,只是没有将任何内容写入日志文件。其他类似的应用程序记录没有问题。
当应用程序启动时,我查看了 WebSphere 控制台,没有任何错误可能表明 Log4J 没有记录的原因。
我向另一位开发人员(他曾在此应用程序上工作过,但没有一段时间,而且比我在此应用程序上更过时)提到了这一点,他说这是非常奇怪的行为,但不知道为什么会这样无法记录并且不报告任何错误。
我已经检查了配置文件和属性文件,一切看起来都OK。我怀疑 Log4J 甚至从未读取过 log4j.xml,但我不确定。自从我使用 Log4J 以来已经有一段时间了 - 有没有人有一些解决此类问题的好技巧?
PS:此应用程序的某些实例部署到各种测试/QA/prod 服务器,并且这些实例都可以正常记录。 仅在本地工作站上,日志记录似乎静默失败。
更新:因此,应用程序的部署方式似乎确实存在问题。
我将类加载器模式更改为“Parent Last”,我可以看到至少现在正在读取 Log4J 文件。我尝试的第一个动作触发了ClassNotFoundException,说找不到org.apache.commons.logging.impl.Log4jFactory。
第二次更新:
我注意到了一些奇怪的事情......该应用程序有两个 WAR 项目 - 其中一个用于 UI,另一个用于某些 Web 服务。用于 UI 的项目 已成功将其操作记录到日志文件中。 Web 服务项目是因ClassNotFoundException 而失败的项目。它们都将 commons-logging.jar 列为 JavaEE 模块依赖项,并且它们都没有特定于项目的日志记录配置(所有配置文件都在 Resources 项目中)。
一个主要区别在于,该 UI 项目包含一些其他内部框架(预编译为 JAR),可能已经包含必要的日志记录配置,也许这就是区别所在。
我还尝试使用来自这个问题:Websphere all logs are going to SystemOut.log 但似乎没有帮助。
【问题讨论】:
-
它是什么类型的记录器实例?和 RollingFileAppender 一样
-
@Woot4Moo:这是一个 FileAppender。
-
我会开始在 log4j 配置文件中引入一个错误,因此它会在初始化期间爆炸,只是为了验证文件正在被读取。
-
@FrustratedWithFormsDesigner Log4j 因不从您认为正在读取的配置文件中读取而臭名昭著。 (或者更确切地说,写得不好的应用程序因以这种方式滥用 log4j 而臭名昭著。)我要做的是在 log4j 配置类中放置断点,以查看调用了哪个以及它们从哪里读取。
-
太棒了!您发现了 WAS 中最奇怪的错误来源之一。一个快速的解决方法是将公共日志添加到您的应用程序中。
标签: java log4j websphere rad websphere-7