通过JVM参数进行log4j配置?


133

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

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


2
读者当心:重要的是要注意这个问题是在询问log4j,而不是log4j2。
neves

Answers:


160

您是否有一个log4j配置文件?只需使用

-Dlog4j.configuration={path to file}

{文件路径}的前缀 file:

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

-Dlog4j.configurationFile={path to file}

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


Brian-不完全是我想要的,但是我认为这是在将文件移动到应用程序和通过JVM args设置属性之间的妥协。
jconlin 2009年

我认为,随着您的应用程序变得更加复杂(如果可以),那么随着您对其进行更多配置,该文件将变得更易于管理。但是,我承认我在这里猜测您的用例。
Brian Agnew

25
{path to file}需要file:为此工作。
OR Mapper 2014年

2
@ORMapper-我已经进行了适当的修改
Brian Agnew

6
请注意是否使用Log4j 2作为属性名称和语法。看到这个答案
何塞·安迪亚斯(JoséAndias)

161

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

-Dlog4j.configuration={path to file}

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

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

此处有更多信息和示例:http : //logging.apache.org/log4j/1.2/manual.html


2
对于Logback:-Dlogback.configurationFile=C:\logback-test.xml
2013年

2
+1提及文件(重申蒂姆的话。这使我多次疯狂地使用
log4j。– javadba

13
另一个非常有用的JVM参数来调试log4j配置:-Dlog4j.debug
KC

2
是否可以通过此方法使用相对路径?
AaA

33

这似乎已更改为(可能是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如何将路径设为绝对
Cyber​​monk

对于Docker容器,我使用JAVA_PARAMS="-Dlog4j.configurationFile=classpath:log4j2-container.xml"Docker映像是否支持使用env vars覆盖JAVA_PARAMS且文件位于Jar中。
Marcello de Sales

21

我知道已经回答了这个问题,但是因为您说的不是您要找的东西,所以我想指出以下替代方法:

您也可以使用配置类代替属性或xml文件。

-Dlog4j.configuratorClass=com.foo.BarConfigurator

参见http://logging.apache.org/log4j/1.2/manual.html详细信息,。


1
如果有人要避免创建配置文件,这是正确的解决方案。在您自己的自定义Configurator类中,您可以调用BasicConfigurator(),也可以根据需要创建自己的Loggers和Appenders。但是我更喜欢一个配置文件!
skiphoppy 2012年

11

通常,只要您的log4j.properties文件位于类路径上,Log4j就会在JVM启动时自动将其拾取。


1
的确是这样:-Dlog4j.configuration仅在文件不在类路径中或者您要使用不是在类路径中找到的第一个文件的情况下才需要
javadba 2014年


1

相对路径也可以:

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

0

如果您使用gradle。您可以应用“ aplication”插件并使用以下命令

  applicationDefaultJvmArgs = [
             "-Dlog4j.configurationFile=your.xml",
                              ]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.