我刚刚在工作中选择了一个现有的 Web 应用程序,该应用程序应该使用 Log4J 记录其活动。我已经完全按照我被告知的方式配置了我的工作区,其他所有内容(数据库连接、身份验证等)都工作正常,除了没有任何内容写入日志文件。其他类似的应用程序日志记录没有问题。
我在应用程序启动时查看了 WebSphere 控制台,那里没有任何错误可以表明 Log4J 不记录日志的原因。
我向另一位开发人员提到过这一点(他曾经开发过这个应用程序,但没有工作一段时间,而且比我所使用的应用程序更过时),他说这是非常奇怪的行为,但不知道为什么它可能无法登录并且不报告任何错误。
我已经检查了配置文件和属性文件以及所有内容looks好的。我怀疑 Log4J 甚至从未读取过 log4j.xml 但我不确定这一点。自从我使用 Log4J 以来已经有一段时间了 - 有人对解决此类问题有一些好的建议吗?
PS:此应用程序的一些实例部署到各种测试/QA/产品服务器,并且这些实例都记录正常。它是only在本地工作站上,日志记录似乎默默地失败了。
Update:因此,应用程序的部署方式似乎确实存在问题。
我将类加载器模式更改为“Parent Last”,我可以看到 Log4J 文件现在至少正在被读取。我尝试的第一个动作会触发ClassNotFoundException
这么说org.apache.commons.logging.impl.Log4jFactory
找不到。
第二次更新:我注意到一些奇怪的事情......该应用程序有两个 WAR 项目 - 其中一个用于 UI,另一个用于某些 Web 服务。用于 UI 的项目is成功地将其操作记录到日志文件中。 Web 服务项目是失败的一个,原因是ClassNotFoundException
。它们都将 commons-logging.jar 列为 JavaEE 模块依赖项,并且都没有特定于项目的日志记录配置(所有配置文件都在 Resources 项目中)。
主要区别在于 UI 项目包含一些其他内部框架(预编译为 JAR)might已经包含必要的日志记录配置,也许这就是区别所在。
我还尝试使用此问题的答案(META-INF/services 中名为 org.apache.commons.logging.LogFactory 的文件,其中一行包含:“org.apache.commons.logging.impl.Log4jFactory”):Websphere 所有日志都将转到 SystemOut.log但这似乎没有帮助。