我有应用程序A.ear,其中包含一个Web应用程序A.war。我在此war中包含了log4jAdmin.jsp,以便在运行时为此应用程序中使用的记录器动态控制日志记录级别。我还在同一服务器实例中的weblogic中部署了另一个应用程序B.ear。此应用程序也有自己的log4j.xml文件中定义的记录器份额。如何在log4jAdmin.jsp页面中显示应用程序B.ear的记录器,该页面是A.ear的一部分。我使用的是weblogic 9.2。
我知道根据类加载器的概念,每个应用程序都有自己的类加载器&将log4j相关文件(jar和xml)移动到一个公共域文件夹的解决方案可能会有效,但由于我无法控制的原因,我不能这样做A.ear这是Oracle的一个专用应用程序(属于他们的一个通信套件)如果我遵循这条路线,产品会崩溃。 B.ear是我开发的一个自定义应用程序,它包含的插件只是A.ear调用的Enterprise Bean。
那么有没有一种方法可以让所有已部署的应用程序都可以看到记录器,这样只需使用一个log4jAdmin.jsp即可更改其日志记录级别?我知道我想要实现的是真正有效的,因为我注意到它在最新版本的A.ear中运行,该版本由Oracle为WL 10.3.3发布。在A.ear的log4jAdmin.jsp页面中可以看到为B.ear定义的记录器。所以我想知道需要做什么才能使我在WL 9.2中获得相同的结果。
非常感谢任何帮助/提示。
由于
答案 0 :(得分:0)
我没有使用过WebLogic,所以我的建议将是推测性的,并且具有一般性。
由于类加载层次结构方案是由EJB规范定义的,因此我尝试将log4j及其配置尽可能地部署在层次结构中。大多数应用程序服务器都有一个“扩展”目录,您可以在其中放置一个扩展类加载器可见的jar,它优先于所有Web / ear类加载器。您可以将log4j.jar和(important!)log4j.xml放在那里。可能有必要在jar文件中打包log4j.xml(我不知道特定于WL的详细信息),因为类加载器通常只查找jar。