2010-11-19 81 views
1

我们的Java WebStart应用程序不包含log4j配置文件;它只是设置了一些硬编码记录器和appender。使用Java Web Start的log4j配置

我希望个人客户能够在某处放置log4j.properties文件,并在故障排除情况下设置自己的自定义日志记录。我可以将log4j.properties文件捆绑到某个应用程序的其中一个jar文件中,这将允许进行配置,但对于每个客户端而言,配置都是相同的,而不仅仅是影响要排除故障的客户端。另外,我无法在运行中更改设置。

有没有办法阻止log4j initialization procedure使用每个客户端的配置文件?

回答

3

这里的基本问题是,Java Web Start严重限制了对机器的访问。

如果您正在运行已签名的应用程序并且用户允许您完全访问机器,则应该可以执行此操作。如果没有,你不能用log4j和默认机制来做到这一点。

您可能希望编写自己的配置程序,该配置程序使用Java WebStart API从文件系统读取数据,然后将数据提供给log4j,但这需要一些精力。

+0

我确实可以完全访问机器。希望我不必编写自己的配置器,因为我希望能够在已部署的某些机器上执行此操作,而无需编写新的代码和升级。 – skiphoppy 2010-11-19 17:25:52

+0

如果您有完全访问机器的权限,那么 - 未经测试 - 在jnlp文件中设置log4j.configuration系统属性。有关详细信息,请参见http://logging.apache.org/log4j/1.2/manual.html - “默认初始化过程”一节。 – 2010-11-19 17:32:08

1

您可以使用PersistenceService在本地用户的计算机上存储log4j配置(无需签名即可工作),或者至少在启动web启动应用程序时存储是否加载特殊配置的标志。

还有一个FileOpenService,最终用户可以通过它打开本地log4j.xml文件,以实时重新配置日志记录工具。这样,用户可以控制配置,并且可以控制何时何地应用它。

使用FileOpenService将流传输到log4j配置文件的应用程序代码可以使用DOMConfigurator.configure(InputStream)重新配置log4j。