如何在WebSphere 7中设置log4j.configuration系统变量



我有一个Java EE 5 web应用程序,我正在作为EAR文件部署到WebSphere 7。

我希望我的log4j配置在EAR文件的外部,这样我就可以在需要时调整日志内容,而无需重建和重新部署EAR文件。

我的理解是,我可以通过设置称为log4j.configuration的"系统变量"。(例如,log4j.config=c:/log4j.properties)

我的问题是,如何在WebSphere 7管理控制台中设置这个系统变量?

浏览一下,我看到有Environment > WebSphere Variables,但这看起来不对,因为这将为整个服务器设置一个变量。我猜我只想为我的应用程序EAR文件设置一个系统变量。

非常感谢任何帮助或建议!

Rob

log4j.configuration属性是Java虚拟机系统属性。您可以通过将该属性添加到应用程序服务器的通用JVM参数列表的末尾来加载该属性。这是在WebSphere控制台中通过导航以下内容来完成的:

Servers > Application servers > [app server name] > Process definition > Java Virtual Machine

在GenericJVM参数下,添加以下内容:

-Dlog4j.configuration=file:C:/log4j.properties

单击此页面底部的Apply,然后保存您的更改。这需要重新启动应用程序服务器才能生效。

您还可以为应用程序使用共享库,并将log4j.xml放在那里。

我找到了一个解决方案,为每个EAR或WAR分配一个外部log4j.xml配置文件:

  1. 我从我们的EAR中提取了log4j.xml,将这个单独的xml压缩到一个JAR文件中。将其放置在WebSphere可访问的路径中的服务器上
  2. 创建一个共享库(WebSphere>Environment>SharedLibraries),将类路径映射到此存档。请确保选择"为这个共享库使用一个独立的类加载器",否则您必须为应用程序的每个模块而不仅仅是父EAR分配引用
  3. 在我们的EAR中分配引用(应用程序->应用程序类型->WebSphere企业应用程序->EAR名称->共享库引用->选择您的EAR->引用共享库->选择LOG4J CONFIGURATION JAR)并添加它
  4. 重新启动应用程序

我使用这种方式为EAR中的每个WAR分配一个特定的外部log4j配置文件。在这里你可以找到原始的解决方案。

如何将Log4j.xml(而不是log4j2.xml)指向外部文件

对于Linux操作系统中websphere8.5中的Log4J(而不是Log4J2),请在Servers>应用服务器>[应用服务器名称]>流程定义>Java虚拟机。属性名称:log4j.configuration属性值:文件:/xyz/abc/def/config/log4j.xml

注意:如果你是从自定义属性中添加-D,那么你就不需要添加了。但是,如果您在GenericJVM参数下给出它,请使用以下方法:-Dlog4j.configuration=file:/xyz/abc/def/config/log4j.xml-Dlog4j.debug每个属性必须用空格分隔。我为Log4J本身添加了调试日志,以查看它从哪里挑选Log4J.xml文件。

最新更新