【问题标题】:How to use log4j2 in the web application WITHOUT log4j-web.jar如何在没有 log4j-web.jar 的 Web 应用程序中使用 log4j2
【发布时间】:2021-12-27 21:09:41
【问题描述】:
我想把 log4j2 (v2.17.0) 的配置文件放在war文件之外。因此,我可以在不重新部署 war 文件的情况下更改日志记录配置。 log4j2-web.jar 提供了在 war 文件之外配置配置文件以及其他功能的机制。
不幸的是,我不允许在 Web 应用程序中使用 log4j-web.jar 文件。
根据log4j2FAQ,不建议使用LoggerContext加载配置文件,因为它不是公共API的一部分。
问题:
在没有 log4j-web.jar 文件的 Web 应用程序中是否有任何有效的方法可以使用 log4j2?
【问题讨论】:
标签:
java
logging
log4j
log4j2
【解决方案1】:
问:在没有log4j-web.jar文件的web应用中,有没有什么有效的方法可以使用log4j2?
有两种可能的方法可以在不使用 log4j2-web.jar 的情况下动态更新日志记录配置。
-
忽略常见问题的建议1并使用LoggerContext.reload重新加载配置。
Log4j2 团队可能会在未来的版本中更改某些内容,从而使这种方法不再有效。但这不太可能(IMO)......如果/当它发生时,你可以处理这个问题。
-
使用 Log4j2 的automatic reconfiguration 机制。基本上,您告诉 Log4j2 定期检查配置文件以查看它是否已更改。
然而……
如果我是你,我想了解为什么你“不允许”使用“log4j-web.jar”。是出于安全原因吗?如果是这样,您可能需要与安全人员交谈,以便您完全了解安全原因。
问:为什么?
答:因为您似乎想要复制“log4j-web.jar”的某些功能。您尝试复制的功能可能是您的安全团队担心的根源。如果是这种情况,那么从安全角度来看,手动实现功能(即不使用“log4j-web.jar”)可能会更糟!
所以...找出答案!这不是“请求宽恕而不是许可”是一种合理策略的情况。
1 - 实际上,我不认为这是“推荐”。相反,我将其解读为“对潜在后果的警告”。如果他们真的认为使用LoggerContext.reload 这是一个坏主意,我想他们会使用更明确的语言。