0

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

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

4

3 回答 3

2

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

于 2012-08-24T18:30:12.430 回答
0

我会寻求在启动时配置 log4j 的解决方案,参考正确的位置。这应该是可行的:

我会一一试一试,看看这些是否能解决问题。

唯一的问题是,如果您有多个这样的配置文件,如果 1.st 方法是您的方式,您可能需要调用resetConfiguration()prio to configure(),正如 javadoc 所说:“现有配置不会被清除或重置。”

您可能需要为此调用prio:

LogManager.resetConfiguration()

所以要么:

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

或者:

LogManager.resetConfiguration();
PropertyConfigurator.configure("/path/to/log4j.properties");
于 2012-08-25T12:19:09.190 回答
0

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

我认为你有几个选择:

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

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

  3. 让应用程序中加载 Log4J 类的所有内容都使用特殊的类加载器,例如通过使用 OSGI 或构建您自己的 LoggerFactory,后者使用特殊的类加载器加载 log4j LoggerFactory。该库显然不会这样做,从而获得他们自己的一组 Log4J 类,并且他们对配置所做的任何事情都不会影响您。

于 2012-08-25T12:39:00.747 回答