通过 JVM 参数进行 log4j 配置?

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

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

226679 次浏览

您有 log4j 配置文件吗

-Dlog4j.configuration={path to file}

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

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

-Dlog4j.configurationFile={path to file}

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

通常,只要 Log4j.properties 文件在类路径上,Log4j 就应该在 JVM 启动时自动拾取它。

我知道这个问题已经有答案了,但是因为你说过,这并不是你想要的,我想指出以下的替代方案:

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

-Dlog4j.configuratorClass=com.foo.BarConfigurator

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

解决方案是使用以下 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

这似乎已经改变(可能使用 log4j2)为:

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

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

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

Log4J 2.x 以后的 JVM 选项应该是 -Dlog4j.configurationFile=<filename>


P.S. <filename>可以是一个相对于类路径 没有file:的文件,正如其他答案中所建议的那样。

相对路径也可以:

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

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

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

根据页面(Log4j2-自动配置) Log4j2需要:

-Dlog4j2.configurationFile=<path to file>

Log4j 将检查“ log4j2.configationFile”系统属性,如果设置了该属性,将尝试使用与文件扩展名匹配的 ConfigurationFactory 加载配置。注意,这不限于本地文件系统上的位置,可能包含 URL。

摘自: Log4j2-自动配置