扩展log4j Logger

时间:2012-08-24 18:24:12

标签: java log4j

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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

我会逐个试一试,看看是否有任何一个可以解决问题。

唯一的问题是,如果您有多个这样的配置文件,以防1.st方法是您的方式,您可能需要将resetConfiguration() prio称为configure(),作为javadoc说: “现有配置不会被清除也不会重置。”

您可能需要将prio称为:

LogManager.resetConfiguration()

所以:

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

或:

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

答案 2 :(得分:0)

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

我认为你有几种选择:

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

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

  3. 在您的应用程序中加载Log4J类的所有内容都使用一个特殊的类加载器,例如:通过使用OSGI或构建您自己的LoggerFactory,它使用特殊的类加载器加载log4j LoggerFactory。图书馆显然不会这样做,从而得到他们自己的一套Log4J类,他们对配置做的任何事情都不会影响你。