繁体   English   中英

扩展log4j Logger

[英]Extending log4j Logger

我的应用程序大量使用log4j开箱即用。 这使用了许多第三方API。 这些第三方API中的一些完全破坏了我们的记录器并消除了我们的appender有时完全被不同的配置初始化,我们完全失去了我们的日志功能!

任何想法为什么log4j可以这么容易被黑客攻击? 如果我们需要解决这个问题,我们必须重新编写log4j实现吗?

您可以尝试将记录器放入不同的类加载器中吗?

我会在启动时找到配置log4j的解决方案,并将其提供给正确的位置。 这应该是可行的:

我会一个接一个地试一试,看看其中任何一个是否能解决问题。

唯一的问题是,如果您有多个这样的配置文件,以防1.st方法是您的方式,您可能需要调用resetConfiguration()configure() ,因为javadoc说:“现有的配置是没有清除也没有重置。“

你可能需要调用prio:

LogManager.resetConfiguration()

所以要么:

LogManager.resetConfiguration();
DOMConfigurator.configure("/path/to/log4j.xml");

要么:

LogManager.resetConfiguration();
PropertyConfigurator.configure("/path/to/log4j.properties");

Log4J很容易被“黑客攻击”,因为它无法区分预期配置log4j的应用程序配置和一些不了解log4j基础知识并在库中配置它的库开发人员。

我想你有几个选择:

  1. 找出您的库何时破坏log4j配置并确保之后覆盖该配置。

  2. 为开放源代码库提交一个错误,如果是开源的话,你甚至可以自己提交补丁,使用该补丁的附加选项,无论它是否包含在官方发行版中。

  3. 让你在应用程序中加载Log4J类的所有东西都使用一个特殊的类加载器,例如使用OSGI或构建你自己的LoggerFactory,它使用一个特殊的类加载器加载log4j LoggerFactory。 该库显然不会这样做,从而得到他们自己的一组Log4J类,他们对配置做的任何事情都不会影响你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM