Log4j2,如何使用命令行参数控制日志输出目录

时间:2016-07-12 15:30:27

标签: java logging configuration log4j2

我希望能够使用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" [/编辑]

2 个答案:

答案 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前缀。当我尝试使用jvmrunargsenv并且没有工作时,这对我来说很困惑。