在哪里放置log4j.xml

时间:2010-05-05 10:45:59

标签: log4j

我们如何指定log4j在尝试查找其xml配置文件时必须查看?

似乎默认情况下,log4j会查看类文件夹的根目录,我可以说使用调试log4j功能并从IDE运行我的应用程序。

但是,我的jar中没有任何类文件夹了。 log4j.xml文件位于jar的根目录。

我已经尝试设置选项-Dlog4j.configuration = log4j.xml但它不起作用。

以下是我的应用程序的全局结构:

  • com
  • LIB
  • META-INF
  • 的log4j.xml

6 个答案:

答案 0 :(得分:32)

它使用CLASSPATH找到log4j.xml。如果log4j找不到任何配置文件,它将向控制台发送错误。如果您没有看到任何此类错误,则可能是它找到的配置文件可能不是您正在编辑的配置文件。有一个命令行选项可强制Log4J报告它正在使用的配置文件的路径。

来自http://wiki.apache.org/logging-log4j/Log4jConfigurationHelp

  

如果您使用“-Dlog4j.debug”运行,那么   log4j将打印信息到标准   输出告诉它是如何尝试的   配置自己。透过那看   会告诉你它在哪里寻找   配置文件。

答案 1 :(得分:19)

假设您的log4j配置在源树之外。如果找不到您的配置文件,请使用以下命令:

-Dlog4j.configuration=file:///your/path/log4j.xml

请注意限定符 file:/// 。没有它就行不了。

答案 2 :(得分:5)

  

我没有任何错误

所以log4j正在找你的配置,否则你会得到:

  

log4j:WARN找不到logger()的附加程序。
  log4j:WARN请正确初始化log4j系统。

此外:

  

日志刚刚在控制台上打印出来

这意味着您可能需要定义文件追加器,例如FileAppenderRollingFileAppenderthe short intro上的“配置”部分有几个例子。

答案 3 :(得分:3)

您可以使用:

DOMConfigurator.configure(log4jConfigurationFilename);

并指定位置,如果它不是根!

答案 4 :(得分:2)

这可能是一个非常古老的问题,但对我来说答案就在这里 https://logging.apache.org/log4j/2.x/manual/configuration.html

按照上面的链接,Apache在类路径中按以下特定顺序搜索log4j2.xml文件

  1. Log4j将检查“ log4j.configurationFile”系统属性,如果设置了该属性,将尝试使用与文件扩展名匹配的ConfigurationFactory加载配置。
  2. 如果未设置系统属性,则ConfigurationFactory属性将在类路径中查找log4j2-test.properties。
  3. 如果未找到此类文件,则YAML ConfigurationFactory将在类路径中查找log4j2-test.yaml或log4j2-test.yml。
  4. 如果未找到此类文件,则JSON ConfigurationFactory将在类路径中查找log4j2-test.json或log4j2-test.jsn。 如果找不到这样的文件,XML ConfigurationFactory将在类路径中查找log4j2-test.xml。
  5. 如果找不到测试文件,则ConfigurationFactory属性将在类路径中查找log4j2.properties。
  6. 如果找不到属性文件,则YAML ConfigurationFactory将在类路径中查找log4j2.yaml或log4j2.yml。
  7. 如果无法找到YAML文件,则JSON ConfigurationFactory将在类路径上查找log4j2.json或log4j2.jsn。
  8. 如果无法找到JSON文件,则XML ConfigurationFactory将尝试在类路径上找到log4j2.xml。
  9. 如果找不到配置文件,将使用DefaultConfiguration。这将导致日志记录输出进入控制台。

答案 5 :(得分:-1)

不要担心放在哪里。只需运行你的项目,比如在eclipse中,log4j会抛出一个异常,告诉你它在哪里。然后你可以把它放在那里。

一旦你开始工作,你也会弄清楚如何改变它,因为你理解逻辑。