【问题标题】:log4j configuration via JVM argument(s)?通过 JVM 参数进行 log4j 配置?
【发布时间】:2010-10-21 04:56:06
【问题描述】:

我必须设置/传递哪些变量作为 JVM 的参数才能使 log4j 正常运行?正确地说,我的意思是不要抱怨并打印到控制台。可以看一个典型的例子吗?

注意:我需要避免在应用程序中创建 log4j.properties 文件。

【问题讨论】:

  • 读者注意:重要的是要注意这个问题是关于 log4j,而不是 log4j2。

标签: java logging log4j


【解决方案1】:

你有 log4j 配置文件吗?只需使用

引用它
-Dlog4j.configuration={path to file}

其中 {path to file} 应以 file: 为前缀

编辑:如果你正在使用 log4j2,你需要使用

-Dlog4j.configurationFile={path to file}

取自答案https://stackoverflow.com/a/34001970/552525

【讨论】:

  • Brian - 不完全是我想要的,但我认为在将文件移动到我的应用程序和通过 JVM 参数设置属性之间取得了不错的折衷。
  • 我认为随着您的应用程序变得更加复杂(如果会的话),随着您对文件的更多配置,文件变得更易于管理。但是我承认我在这里猜测您的用例。
  • {path to file} 需要在前面加上 file: 才能正常工作。
  • @O.R.Mapper - 我已适当修改
  • 注意是否使用 Log4j 2 作为属性名称和语法更改。见this answer
【解决方案2】:

解决方案是使用以下 JVM 参数:

-Dlog4j.configuration={path to file}

如果文件不在类路径中(在 Tomcat 的情况下为 WEB-INF/classes)但在磁盘的某个位置,请使用 file:,例如

-Dlog4j.configuration=file:C:\Users\me\log4j.xml

更多信息和示例在这里:http://logging.apache.org/log4j/1.2/manual.html

【讨论】:

  • 对于 Logback:-Dlogback.configurationFile=C:\logback-test.xml
  • +1 用于提及文件(重申蒂姆所说的话。这让我对 log4j 发疯了很多次。
  • 另一个非常方便调试 log4j 配置的 JVM 参数:-Dlog4j.debug
  • 这种方法可以使用相对路径吗?
【解决方案3】:

这似乎已更改(可能与 log4j2)为:

-Dlog4j.configurationFile=file:C:\Users\me\log4j.xml

见:https://logging.apache.org/log4j/2.x/manual/configuration.html

【讨论】:

  • 这给了我以下异常。 C:\Development\Eclipses\EclipseMars\file:C:\Users\ABC\log4j2.xml 如何使路径成为绝对路径
  • 对于 Docker 容器,如果 Docker Image 支持使用 env var 覆盖 JAVA_PARAMS 并且文件位于 Jar 中,我使用 JAVA_PARAMS="-Dlog4j.configurationFile=classpath:log4j2-container.xml"
【解决方案4】:

我知道这已经被回答了,但是因为你说这不是你正在寻找的,我想指出以下替代方案:

您也可以使用配置类而不是属性或 xml 文件。

-Dlog4j.configuratorClass=com.foo.BarConfigurator

详情请见http://logging.apache.org/log4j/1.2/manual.html

【讨论】:

  • 如果有人想避免创建配置文件,这是正确的解决方案。在您自己的自定义 Configurator 类中,您可以调用 BasicConfigurator(),或者根据需要创建自己的 Loggers 和 Appenders。但我更喜欢配置文件!
【解决方案5】:

通常,只要您的 log4j.properties 文件位于类路径中,Log4j 就应该在 JVM 启动时自动获取它。

【讨论】:

  • 这是真的:-Dlog4j.configuration 仅在文件不在类路径中或您想使用不是在类路径中找到的第一个文件时才需要
【解决方案6】:

自 2015 年以来,Log4J 1.x 迟到了 EOL

从 Log4J 2.x 开始,JVM option 应该是 -Dlog4j.configurationFile=<filename>


附言<filename> 可能是相对于类路径的文件没有 file: 如其他答案中所建议的那样。

【讨论】:

  • 重要答案,因为其他答案不再有效。
【解决方案7】:

相对路径也可以:

java -Dlog4j.configuration=file:".\log4j.properties" -jar com.your-1.0-SNAPSHOT.jar

java -Dlog4j.configuration=file:".\log4j.xml" -jar com.your-1.0-SNAPSHOT.jar

【讨论】:

    【解决方案8】:

    如果你正在使用 gradle。您可以应用“应用程序”插件并使用以下命令

      applicationDefaultJvmArgs = [
                 "-Dlog4j.configurationFile=your.xml",
                                  ]
    

    【讨论】:

      猜你喜欢
      • 2013-10-31
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多