我有一个应用程序,大量使用log4j的开箱即用。这使用了大量的第三方api。其中一些第三方api完全侵入了我们的记录器,清除了我们的附加程序,有时完全用不同的配置初始化,我们完全失去了日志功能!!你知道为什么log4j这么容易被入侵吗?如果我们需要解决这个问题,我们必须重新编写log4j实现?
n3ipq98p1#
您可以尝试将记录器放入其他类装入器中吗?
yeotifhr2#
log4j很容易被“黑客”攻击,因为它无法区分需要配置log4j的应用程序配置和一些不了解log4j的基础知识并在库中进行配置的库开发人员。我想你有几个选择:找出您的库何时损坏log4j配置,并确保随后覆盖该配置。提交一个错误的行为库,在开放源码的情况下,你甚至可以自己提交一个补丁,附加选项使用该补丁,无论它是否包含在官方发行版。让应用程序中加载log4j类的所有内容都使用一个特殊的类加载器,例如,通过使用osgi或构建您自己的loggerfactory,用一个特殊的类加载器加载log4j loggerfactory。库显然不会这样做,因此会得到自己的一组log4j类,而且它们对配置所做的任何操作都不会影响您。
rhfm7lfc3#
我会选择在启动时配置log4j的解决方案,参考正确的位置。这应该是可行的:使用@mark这里提到的方法:如何强制log4j从非src文件夹加载xml配置?或者@jon7这里的一个:如何强制log4j从非src文件夹加载xml配置?或者通过上提到的方法:配置log4j属性路径的最佳实践我会给他们一个一个的尝试,看看这些是否能解决问题。唯一的问题是,如果您有多个这样的配置文件,如果1.st方法是您的方式,您可能需要调用 resetConfiguration() 优先于 configure() ,正如javadoc所说:“既没有清除也没有重置现有的配置。”你可能需要打电话给prio:
resetConfiguration()
configure()
LogManager.resetConfiguration()
所以要么:
LogManager.resetConfiguration(); DOMConfigurator.configure("/path/to/log4j.xml");
或:
LogManager.resetConfiguration(); PropertyConfigurator.configure("/path/to/log4j.properties");
3条答案
按热度按时间n3ipq98p1#
您可以尝试将记录器放入其他类装入器中吗?
yeotifhr2#
log4j很容易被“黑客”攻击,因为它无法区分需要配置log4j的应用程序配置和一些不了解log4j的基础知识并在库中进行配置的库开发人员。
我想你有几个选择:
找出您的库何时损坏log4j配置,并确保随后覆盖该配置。
提交一个错误的行为库,在开放源码的情况下,你甚至可以自己提交一个补丁,附加选项使用该补丁,无论它是否包含在官方发行版。
让应用程序中加载log4j类的所有内容都使用一个特殊的类加载器,例如,通过使用osgi或构建您自己的loggerfactory,用一个特殊的类加载器加载log4j loggerfactory。库显然不会这样做,因此会得到自己的一组log4j类,而且它们对配置所做的任何操作都不会影响您。
rhfm7lfc3#
我会选择在启动时配置log4j的解决方案,参考正确的位置。这应该是可行的:
使用@mark这里提到的方法:如何强制log4j从非src文件夹加载xml配置?
或者@jon7这里的一个:如何强制log4j从非src文件夹加载xml配置?
或者通过上提到的方法:配置log4j属性路径的最佳实践
我会给他们一个一个的尝试,看看这些是否能解决问题。
唯一的问题是,如果您有多个这样的配置文件,如果1.st方法是您的方式,您可能需要调用
resetConfiguration()
优先于configure()
,正如javadoc所说:“既没有清除也没有重置现有的配置。”你可能需要打电话给prio:
所以要么:
或: