Java 是否通过JVM参数进行log4j配置?

Java 是否通过JVM参数进行log4j配置?,java,logging,log4j,Java,Logging,Log4j,为了让log4j正常运行,我必须设置/传递哪些变量作为JVM的参数?正确地说,我的意思是不要抱怨,不要打印到控制台上。我能看一个典型的例子吗 注意:我需要避免在应用程序中创建log4j.properties文件。您有log4j配置文件吗?只需使用 -Dlog4j.configuration={path to file} 其中{path to file}应以file: 编辑:如果使用log4j2,则需要使用 -Dlog4j.configurationFile={path to file} 一般

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


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

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

-Dlog4j.configuration={path to file}
其中{path to file}应以
file:

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

-Dlog4j.configurationFile={path to file}

一般来说,只要log4j.properties文件位于类路径上,log4j就应该在JVM启动时自动获取它

我知道这已经得到了回答,但因为你说,这不是你想要的,我想指出以下替代方案:

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

-Dlog4j.configuratorClass=com.foo.BarConfigurator

有关详细信息,请参阅。

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

-Dlog4j.configuration={path to file}
如果文件不在类路径中(对于Tomcat,在
WEB-INF/classes
中),而是在磁盘上的某个地方,请使用
file:
,如

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

更多信息和示例如下:

这似乎已更改(可能是使用log4j2)为:


请参阅:

自2015年以来,Log4J 1.x已达到

Log4J 2.x以后的文件应该是
-Dlog4j.configurationFile=



p.S.
可以是相对于类路径的文件,而不包含
文件:
,如其他答案所示。

相对路径也可以:

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


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

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

Brian-不完全是我想要的,但我认为在将文件移动到我的应用程序和通过JVM args设置属性之间,这是一个不错的折衷方案。我认为,随着应用程序变得更复杂(如果会),随着配置的增加,文件变得更易于管理。不过,我承认我在猜测您的用例。
{path to file}
需要在前面加上
文件:
,这样才能起作用。@O.R.Mapper-我已经做了适当的修改,如果在属性名称和语法更改时使用Log4j 2,请注意。请参阅。如果有人希望避免创建配置文件,这是正确的解决方案。在您自己的自定义配置器类中,您可以调用BasicConfigurator(),或者创建您自己的记录器和附加器。但是我更喜欢一个配置文件!对于Logback:
-Dlogback.configurationFile=C:\Logback test.xml
+1用于提及文件(重复Tim所说的。这让我多次对log4j发疯。另一个JVM参数非常方便调试log4j配置:
-Dlog4j.debug
是否可以将相对路径与此方法一起使用?这是正确的:只有当文件不在类路径中或者您想使用不在类路径中的文件时,才需要-Dlog4j.configuration。)t在类路径中找到的第一个,这给了我以下异常。C:\Development\Eclipses\EclipseMars\file:C:\Users\ABC\log4j2.xml如何使Docker容器的路径为绝对路径,我使用了
JAVA_PARAMS=“-Dlog4j.configurationFile=classpath:log4j2 container.xml”
如果Docker映像支持使用env vars覆盖JAVA_参数,并且文件在Jar中。重要答案,因为其他答案不再有效。读者注意:重要的是要注意,问题是关于log4j,而不是log4j2。
java -Dlog4j.configuration=file:".\log4j.xml" -jar com.your-1.0-SNAPSHOT.jar
  applicationDefaultJvmArgs = [
             "-Dlog4j.configurationFile=your.xml",
                              ]