8

我有一个 Java EE 5 Web 应用程序,我将其作为 EAR 文件部署到 WebSphere 7。

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

我的理解是我可以通过设置一个名为 log4j.configuration 的“系统变量”来指定我的 log4j.properties 文件的位置。(例如 log4j.configuration=c:/log4j.properties)

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

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

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

4

4 回答 4

9

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

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

在通用 JVM 参数下,添加以下内容:

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

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

于 2012-12-11T22:04:30.080 回答
1

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

于 2013-10-26T10:35:10.423 回答
0

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

  1. 我从我们的 EAR 中提取了 log4j.xml,将这个单独的 XML 压缩到一个 JAR 文件中。将其放置在 WebSphere 可访问的路径中的服务器上,
  2. 创建一个共享库(WebSphere > Environment > Shared Libraries),将类路径映射到这个档案。确保选择“为此共享库使用隔离的类加载器”,否则您必须为应用程序的每个模块分配引用,而不仅仅是父 EAR。
  3. 在我们的 EAR 中分配引用(Application -> ApplicationType -> WebSphere 企业应用程序 -> EAR NAME -> Shared library references -> SELECT YOUR EAR -> Reference shared libraries -> SELECT THE LOG4J CONFIGURATION JAR)并添加它。
  4. 重新启动应用程序

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

于 2019-03-28T16:20:01.147 回答
0

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

对于 Linux OS 中 websphere 8.5 中的 Log4J(不是 Log4J2),请在服务器 > 应用程序服务器 > [应用服务器名称] > 进程定义 > Java 虚拟机下自定义属性。属性名称:log4j.configuration属性值:文件:/xyz/abc/def/config/log4j.xml

注意:如果您从自定义属性中执行,则不需要附加 -D。但是如果你在通用 JVM 参数下给出它,使用这个: -Dlog4j.configuration=file:/xyz/abc/def/config/log4j.xml -Dlog4j.debug 每个属性必须用空格分隔。我为 Log4J 本身添加了调试日志,以查看它从何处选择 log4J.xml 文件。

于 2021-02-11T11:01:59.767 回答