log4j.xml放在哪里

问题描述 投票:0回答:6

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

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

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

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

这是我目前应用程序的全局结构:

  • com
  • lib
  • 元信息
  • log4j.xml
log4j
6个回答
38
投票

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

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

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


24
投票

假设您的 log4j 配置位于源代码树之外。如果它找不到您的配置文件,请帮助它:

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

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


8
投票

可能这是一个非常古老的问题,但对我来说答案在官方 Log4j 2 文档中:

自动配置

Log4j 能够在运行过程中自动配置自身 初始化。当 Log4j 启动时,它会找到所有

ConfigurationFactory
插件并按加权顺序排列它们 从最高到最低。交付时,Log4j 包含四个
ConfigurationFactory
实现:一种用于 JSON,一种用于 YAML,一种用于属性,一种用于 XML。

  1. Log4j 将检查
    "log4j2.configurationFile"
    系统属性,如果设置,将尝试使用
    ConfigurationFactory
    与文件扩展名匹配。请注意,这 不限于本地文件系统上的某个位置,并且可以 包含一个 URL。
  2. 如果未设置系统属性,ConfigurationFactory 将查找属性
    log4j2-test.properties
    在类路径中。
  3. 如果没有找到这样的文件,YAML ConfigurationFactory 将查找
    类路径中的
    log4j2-test.yaml
    log4j2-test.yml
  4. 如果没有找到这样的文件,JSON ConfigurationFactory 将查找
    类路径中的
    log4j2-test.json
    log4j2-test.jsn
  5. 如果没有找到这样的文件,XML ConfigurationFactory 将查找
    log4j2-test.xml
    在类路径中。
  6. 如果无法找到测试文件,ConfigurationFactory 属性将在类路径上查找
    log4j2.properties
  7. 如果找不到属性文件,YAML ConfigurationFactory 将在类路径上查找
    log4j2.yaml
    log4j2.yml
  8. 如果找不到 YAML 文件,JSON ConfigurationFactory 将在类路径上查找
    log4j2.json
    log4j2.jsn
  9. 如果无法找到 JSON 文件,XML ConfigurationFactory 将尝试在类路径上查找
    log4j2.xml
  10. 如果找不到配置文件,将使用
    DefaultConfiguration
    。这将导致日志输出转到控制台。

5
投票

我没有任何错误

因此 log4j 正在查找您的配置,否则您将得到:

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

还有:

日志只是在控制台打印出来

这意味着您可能需要定义一个文件追加器,例如 FileAppenderRollingFileAppender简短介绍的“配置”部分有一些示例。


3
投票

您可以使用:

DOMConfigurator.configure(log4jConfigurationFilename);

如果不是根目录,请指定位置。


-1
投票

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

一旦你让它发挥作用,当你理解逻辑时,你也会弄清楚如何改变它。

© www.soinside.com 2019 - 2024. All rights reserved.