Java log4j在哪里/如何查找log4j.properties文件?
我正在一个简单的测试应用程序中试用log4j。我在eclipse中创建了一个新的Java项目,并将Log4JJAR(v1.2.16)添加到我的构建路径中。然后我创建一个简单的类来打印Hello World。然后我使用log4jJava log4j在哪里/如何查找log4j.properties文件?,java,logging,log4j,Java,Logging,Log4j,我正在一个简单的测试应用程序中试用log4j。我在eclipse中创建了一个新的Java项目,并将Log4JJAR(v1.2.16)添加到我的构建路径中。然后我创建一个简单的类来打印Hello World。然后我使用log4jLogger类记录信息消息。当我运行应用程序时,我会看到日志消息,使用我假设的默认appender和布局。伟大的我遇到的问题是添加自己的配置。这就是我所做的: 创建了一个带有自定义appender和日志级别的log4j.properties文件,并将其放在src文件夹中(编
Logger
类记录信息消息。当我运行应用程序时,我会看到日志消息,使用我假设的默认appender和布局。伟大的我遇到的问题是添加自己的配置。这就是我所做的:
创建了一个带有自定义appender和日志级别的log4j.properties文件,并将其放在src文件夹中(编译后会将其复制到bin文件夹)。运行应用程序-无更改
我尝试添加PropertyConfigurator.configure(“log4j.properties”)
。运行应用程序-无更改。没有错误,但没有改变
要让log4j加载配置文件,我必须做什么?您可以通过设置
log4j.debug
系统属性来启用log4j内部调试。除此之外,这将导致log4j显示它是如何配置自己的
您可以尝试使用log4j.configuration
system属性显式设置配置文件的URL
另请参见:.
log4j。属性应位于类路径中。复制到“bin文件夹”的“src文件夹”(我假设您在这里谈论的是Eclipse设置)通常属于您的类路径,因此应该找到它(您是否将其放在“src”文件夹的顶部,对吗?Argh。我发现问题在于eclipse导入了错误的Logger
类。它导入了java.util.logging.Logger,当然它有自己的配置,不同于log4j。哦,好吧,希望其他人能做到这一点,并通过阅读这个问题来解决它。查看手册标题下的内容,您会发现以下内容:
精确的默认初始化算法定义如下:
将log4j.defaultInitOverride
系统属性设置为“false
”以外的任何其他值将导致log4j跳过默认值
初始化过程(此过程)
将资源字符串变量设置为log4j.configuration
系统属性的值。指定的首选方式
默认的初始化文件是通过log4j.configuration
系统属性。如果系统属性log4j.configuration为
未定义,然后将字符串变量资源设置为其默认值
值“log4j.properties
”
尝试将资源变量转换为URL
如果资源变量无法转换为URL,例如由于错误的FormedUrlexception,则从
通过调用
org.apache.log4j.helpers.Loader.getResource(resource,Logger.class)
返回一个URL。请注意字符串“log4j.properties
”
构成格式不正确的URL。看见
用于搜索位置的列表
如果找不到URL,请中止默认初始化。否则,从URL配置log4j。这个
将用于解析URL以配置log4j,除非URL结束
使用“.xml
”扩展名,在这种情况下
将使用。您可以选择指定自定义配置程序。这个
log4j.configuratorClass
系统属性的值作为
自定义配置程序的完全限定类名。习俗
您指定的配置器必须实现配置器
接口
我知道这已经有几个月了,但我觉得有必要指出scr文件夹没有“复制”到bin文件夹,也不是运行时类路径的一部分……(构建路径不是运行时类路径!)。Eclipse将src文件夹中的源文件编译到bin(或任何您喜欢的)文件夹。bin文件夹是运行时类路径的一部分
我只是想指出这一点,因为这些线程也经常被非常初级的程序员阅读,而且我总是感到沮丧,因为他们中的大多数人没有掌握Java类路径的技巧,因此会犯一些可以避免的错误。如果定义了类路径,那么问题可能出在类路径中
它没有加载的原因(在我的例子中):在我的一个JAR中有一个冲突的log4j.properties
文件,它正在重载我的classpath
中的文件
简而言之,如果您的log4j.properties
文件未加载,则可能有另一个文件覆盖了它
我想我也会把这个扔进去,以防有人碰到这个。我刚刚花了5个小时试图弄清楚为什么我的默认log4j.properties
无法加载 只要把它扔给那些努力加载log4j.properties文件的人就行了
我通过添加以下行修复了我的问题:
-Dlog4j.defaultInitOverride=TRUE
事实证明,使用该JVM参数,可以告诉Log4j不要使用默认初始化过程,并创建自己的初始化过程
我和我的孩子搏斗。我做了从干净的罐子构建到整个回购拉,什么都没做。这和类文件的清理相结合使它工作起来 哈,编译时未检测到的错误导入是一种痛苦…:-)FM有点过时了。查看1.2.17中LogManager.java
的源代码,默认情况下,它在查找log4j.properties
之前先查找log4j.xml
(在该文档中未提及),定义属性文件的常量声明为@deprecated
(尽管它似乎只是为了防止该常量的外部使用),如果不粗鲁,请回答。你可以不带屈尊俯就地引用答案+1代表答案,2代表风格。羞辱那些没有RTFM的人是没有帮助的。