[英]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基础知识并在库中配置它的库开发人员。
我想你有几个选择:
找出您的库何时破坏log4j配置并确保之后覆盖该配置。
为开放源代码库提交一个错误,如果是开源的话,你甚至可以自己提交补丁,使用该补丁的附加选项,无论它是否包含在官方发行版中。
让你在应用程序中加载Log4J类的所有东西都使用一个特殊的类加载器,例如使用OSGI或构建你自己的LoggerFactory,它使用一个特殊的类加载器加载log4j LoggerFactory。 该库显然不会这样做,从而得到他们自己的一组Log4J类,他们对配置做的任何事情都不会影响你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.