有一整段
in the docs
详细说明log4j如何初始化自身:
具体的默认初始化算法定义如下:
-
将log4j.defaultinitoverride系统属性设置为任何其他值,然后“false”将导致log4j跳过默认初始化过程(此过程)。
-
将资源字符串变量设置为log4j.configuration系统属性的值。指定默认初始化文件的首选方法是通过log4j.configuration系统属性。如果未定义系统属性log4j.configuration,则将字符串变量资源设置为其默认值“log4j.properties”。
-
尝试将资源变量转换为URL。
-
如果资源变量无法转换为URL(例如,由于异常情况),则通过调用org.apache.log4j.helpers.loader.getresource(resource,logger.class),从类路径中搜索资源,该类返回一个URL。请注意,字符串“log4j.properties”构成的URL格式不正确。有关搜索位置列表,请参阅Looal.GETRealo(java. Lang.Stand)。
-
如果找不到URL,则中止默认初始化。否则,从URL配置log4j。propertyconfigurator将用于解析用于配置log4j的URL,除非该URL以“.xml”扩展名结尾,在这种情况下,将使用domconfigurator。您可以选择指定自定义配置程序。log4j.configuratorClass系统属性的值将作为自定义配置器的完全限定类名。您指定的自定义配置程序必须实现配置程序接口。
诚然,这令人费解。基本上,你能做的最简单的事情就是
log4j.properties
在课堂上
你的应用,它会被找到。其他一切都是…技巧。就个人而言,我有时明确地称
BasicConfigurator
我的班级
main
,有时配置(硬编码)文件中可能出现的某些内容…不管我的情况如何。你
可以
完全以编程方式初始化log4j,这会使配置文件的问题变得不重要。尽管它也会使您的配置完全不那么灵活。