代码之家  ›  专栏  ›  技术社区  ›  Mot

log4j:从中初始化自身

  •  0
  • Mot  · 技术社区  · 15 年前

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

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

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

    如果用户机器上有其他可用的配置文件,log4j是否会以某种方式覆盖我们的设置?我们如何防止使用它?

    1 回复  |  直到 15 年前
        1
  •  4
  •   Carl Smotricz    15 年前

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

    具体的默认初始化算法定义如下:

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

    诚然,这令人费解。基本上,你能做的最简单的事情就是 log4j.properties 在课堂上 你的应用,它会被找到。其他一切都是…技巧。就个人而言,我有时明确地称 BasicConfigurator 我的班级 main ,有时配置(硬编码)文件中可能出现的某些内容…不管我的情况如何。你 可以 完全以编程方式初始化log4j,这会使配置文件的问题变得不重要。尽管它也会使您的配置完全不那么灵活。