我希望能够使用VM参数或命令行参数指定log4j2日志的位置。
这与询问如何指定log4j属性文件路径的所有问题不同。
我想我可以在VM参数中添加thread
,然后在onStop
中引用它:
-Darbitrary.path="path/to/root/dir"
唉,似乎这不起作用。有什么我做错了,或者有其他方法来获得这个功能吗?
[编辑]
根据@RC。的建议,我还尝试添加命令行参数log4j2.properties
,并将引用更改为<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<File name="file" fileName="${arbitrary.path}/application.log">
<PatternLayout
pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
</File>
</Appenders>
<Loggers>
<Root level="info" additivity="false">
<AppenderRef ref="file" />
</Root>
</Loggers>
</Configuration>
。但是,此变量将被解析为“-log-dir”并将日志文件放入--log-dir "/tmp/logMonitor/logs"
[/编辑]
答案 0 :(得分:1)
Log4j 2可以替换配置中的属性。属性值可以来自许多地方:系统属性,环境,线程上下文,资源包等。这些称为查找并需要前缀。例如,使用${sys:arbitrary.path}
查找系统属性中的值。请参阅Log4j 2手册的Lookups部分。
另一种方法是您在配置中自己定义arbitrary.path
属性:
<Configuration status="warn">
<Properties>
<Property name="arbitrary.path">/some/path/"</Property>
</Properties>
...
答案 1 :(得分:0)
只是澄清一下,如果您在VM命令行参数中提供路径,则可以使用sys
Lookup前缀。当我尝试使用jvmrunargs
或env
并且没有工作时,这对我来说很困惑。