如何在没有 log4j 的情况下在 Web 应用程序中使用 log4j2-web.jar

How to use log4j2 in the web application WITHOUT log4j-web.jar

我想把log4j2(v2.17.0)的配置文件放到war文件外面。因此,我可以在不重新部署 war 文件的情况下更改日志记录配置。 log4j2-web.jar 提供了在 war 文件之外配置配置文件的机制以及其他功能。

不幸的是,我不允许在 Web 应用程序中使用 log4j-web.jar 文件。 根据log4j2 FAQ,不推荐使用LoggerContext加载配置文件,因为它不是public API.

的一部分

问题: 在没有 log4j-web.jar 文件的情况下,是否有在 Web 应用程序中使用 log4j2 的有效方法?

Question: Is there any valid way to use log4j2 in the web application without log4j-web.jar file?

有两种可能的方法可以在不使用 log4j2-web.jar 的情况下动态更新日志记录配置。

  1. 忽略常见问题解答的建议1并使用LoggerContext.reload重新加载配置。

    Log4j2 团队可能会在未来的版本中进行一些更改,使这种方法不再有效。但这不太可能(IMO)......如果/当它发生时你可以处理这个问题。

  2. 使用Log4j2的automatic reconfiguration机制。基本上,您告诉 Log4j2 定期检查配置文件以查看它是否已更改。


然而...

如果我是你,我想了解为什么你“不允许”使用“log4j-web.jar”。是出于安全原因吗?如果是,您可能需要与安全人员交谈,以便您充分了解安全原因。

问:为什么?

A:因为您似乎想要复制“log4j-web.jar”的某些功能。可能是您试图复制的功能是您的安全团队关注的根源。如果是这种情况,那么手动实现功能(即不使用“log4j-web.jar”)可能会更糟......从安全角度来看!

所以...找出来!在这种情况下,“请求宽恕而不是许可”并不是一个合理的策略。


1 - 实际上,我不认为这是“推荐”。相反,我将其解读为“对潜在后果的警告”。如果他们真的认为使用 LoggerContext.reload 这是个坏主意,我认为他们会使用更明确的语言。