Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java log4j在哪里/如何查找log4j.properties文件?_Java_Logging_Log4j - Fatal编程技术网

Java log4j在哪里/如何查找log4j.properties文件?

Java log4j在哪里/如何查找log4j.properties文件?,java,logging,log4j,Java,Logging,Log4j,我正在一个简单的测试应用程序中试用log4j。我在eclipse中创建了一个新的Java项目,并将Log4JJAR(v1.2.16)添加到我的构建路径中。然后我创建一个简单的类来打印Hello World。然后我使用log4jLogger类记录信息消息。当我运行应用程序时,我会看到日志消息,使用我假设的默认appender和布局。伟大的我遇到的问题是添加自己的配置。这就是我所做的: 创建了一个带有自定义appender和日志级别的log4j.properties文件,并将其放在src文件夹中(编

我正在一个简单的测试应用程序中试用log4j。我在eclipse中创建了一个新的Java项目,并将Log4JJAR(v1.2.16)添加到我的构建路径中。然后我创建一个简单的类来打印Hello World。然后我使用log4j
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的人是没有帮助的。