gpt4 book ai didi

java - Log4j:从哪里初始化自身

转载 作者:行者123 更新时间:2023-12-01 19:22:30 26 4
gpt4 key购买 nike

我们将 Log4j 1.2.15 与我们的普通 Swing 应用程序捆绑在一起,并在启动时从文件系统加载我们自己的属性文件:

import org.apache.log4j.*;

...
System.setProperty("log4j.defaultInitOverride", "true");
...
File log4jPropertiesFile = ...
PropertyConfigurator.configure(log4jPropertiesFile.getAbsolutePath());
...

在我们从客户那里获得的日志中,输出看起来不像我们在属性文件中定义的那样,我们确信只有极少数人自己编辑了该文件。

如果用户计算机上存在另一个可用的配置文件,Log4j 是否会以某种方式覆盖我们的设置?我们如何防止使用它?

最佳答案

有一整段in the docs详细说明 Log4j 如何初始化自身:

The exact default initialization algorithm is defined as follows:

  1. 将 log4j.defaultInitOverride 系统属性设置为“false”之后的任何其他值将导致 log4j 跳过默认初始化过程(此过程)。
  2. 将资源字符串变量设置为 log4j.configuration 系统属性的值。指定默认初始化文件的首选方法是通过 log4j.configuration 系统属性。如果系统属性 log4j.configuration 未定义,则将字符串变量资源设置为其默认值“log4j.properties”。
  3. 尝试将资源变量转换为 URL。
  4. 如果资源变量无法转换为 URL(例如由于 MalformedURLException),则通过调用 org.apache.log4j.helpers.Loader.getResource(resource, Logger.class) 从类路径中搜索资源,其中返回一个 URL。请注意,字符串“log4j.properties”构成格式错误的 URL。有关搜索位置的列表,请参阅 Loader.getResource(java.lang.String)。
  5. 如果找不到 URL,则中止默认初始化。否则,从 URL 配置 log4j。 PropertyConfigurator 将用于解析 URL 以配置 log4j,除非 URL 以“.xml”扩展名结尾,在这种情况下将使用 DOMConfigurator。您可以选择指定自定义配置器。 log4j.configuratorClass 系统属性的值被视为自定义配置器的完全限定类名称。您指定的自定义配置器必须实现配置器接口(interface)。

诚然,这非常难以理解。基本上,您可以做的最简单的事情就是将 log4j.properties 放在应用程序的类路径上,然后就会找到它。其他一切都是……技巧。就个人而言,我有时会在 main 中显式调用 BasicConfigurator 类,有时会配置(硬编码)一些可能出现在文件中的内容...无论我的情况如何呼吁。您可以完全以编程方式初始化 log4j,这会使配置文件的问题变得毫无意义。尽管它也会使您的配置完全不那么灵活。

关于java - Log4j:从哪里初始化自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3374413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com