我刚刚在工作中挑选了一个现有的 Web 应用程序,它应该使用 Log4J 记录其活动。我已经完全按照我被告知的方式配置了我的工作区,其他一切(数据库连接、身份验证等)都可以正常工作,只是没有将任何内容写入日志文件。其他类似的应用程序记录没有问题。
当应用程序启动时,我查看了 WebSphere 控制台,那里没有任何错误可能表明 Log4J 没有记录的原因。
我向另一位开发人员提到了这一点(他曾经在这个应用程序上工作过,但没有一段时间,而且比我现在更过时),他说这是非常奇怪的行为,但不知道为什么它可能无法登录并且不报告任何错误。
我已经检查了配置文件和属性文件,一切看起来都很好。我怀疑 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),这些框架可能已经包括必要的日志配置,也许这就是区别所在。
我还尝试使用此问题的答案(META-INF/services 中名为 org.apache.commons.logging.LogFactory 的文件,其中一行包含:“org.apache.commons.logging.impl.Log4jFactory”):Websphere 所有日志都将转到 SystemOut.log,但似乎没有帮助。