【发布时间】:2010-10-21 04:56:06
【问题描述】:
我必须设置/传递哪些变量作为 JVM 的参数才能使 log4j 正常运行?正确地说,我的意思是不要抱怨并打印到控制台。可以看一个典型的例子吗?
注意:我需要避免在应用程序中创建 log4j.properties 文件。
【问题讨论】:
-
读者注意:重要的是要注意这个问题是关于 log4j,而不是 log4j2。
我必须设置/传递哪些变量作为 JVM 的参数才能使 log4j 正常运行?正确地说,我的意思是不要抱怨并打印到控制台。可以看一个典型的例子吗?
注意:我需要避免在应用程序中创建 log4j.properties 文件。
【问题讨论】:
你有 log4j 配置文件吗?只需使用
引用它-Dlog4j.configuration={path to file}
其中 {path to file} 应以 file: 为前缀
编辑:如果你正在使用 log4j2,你需要使用
-Dlog4j.configurationFile={path to file}
【讨论】:
{path to file} 需要在前面加上 file: 才能正常工作。
解决方案是使用以下 JVM 参数:
-Dlog4j.configuration={path to file}
如果文件不在类路径中(在 Tomcat 的情况下为 WEB-INF/classes)但在磁盘的某个位置,请使用 file:,例如
-Dlog4j.configuration=file:C:\Users\me\log4j.xml
【讨论】:
-Dlogback.configurationFile=C:\logback-test.xml
-Dlog4j.debug
这似乎已更改(可能与 log4j2)为:
-Dlog4j.configurationFile=file:C:\Users\me\log4j.xml
见:https://logging.apache.org/log4j/2.x/manual/configuration.html
【讨论】:
JAVA_PARAMS="-Dlog4j.configurationFile=classpath:log4j2-container.xml"。
我知道这已经被回答了,但是因为你说这不是你正在寻找的,我想指出以下替代方案:
您也可以使用配置类而不是属性或 xml 文件。
-Dlog4j.configuratorClass=com.foo.BarConfigurator
【讨论】:
通常,只要您的 log4j.properties 文件位于类路径中,Log4j 就应该在 JVM 启动时自动获取它。
【讨论】:
自 2015 年以来,Log4J 1.x 迟到了 EOL。
从 Log4J 2.x 开始,JVM option 应该是 -Dlog4j.configurationFile=<filename>
附言<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。您可以应用“应用程序”插件并使用以下命令
applicationDefaultJvmArgs = [
"-Dlog4j.configurationFile=your.xml",
]
【讨论】: