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