2016-07-12 48 views
0

我希望能够指定我的log4j2日志将与VM参数或命令行参数一起去的位置。Log4j2,如何使用命令行参数控制日志记录输出目录

这与询问如何指定log4j属性文件路径的所有问题不同。

我想我可以在VM参数添加-Darbitrary.path="path/to/root/dir"然后引用它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> 

唉,看来这是行不通的。有什么我做错了,或者获得这种功能的一些替代方法?

[编辑]

基于来自@RC。建议,我也尝试添加到命令行参数,--log-dir "/tmp/logMonitor/logs",并改变了参考${main:--log-dir}。然而,这个变量被解析为“-log-dir”,并且将日志文件放入<project_root>/-log-dir/application.log [/编辑]

+0

你读过了:https://logging.apache.org/log4j/2.0/manual/lookups.html? –

+0

根据我认为你指的那个环节的部分,我尝试了另一种策略,但没有成功。我已经为这个问题添加了关于这个的信息。 – ds390s

+0

我会使用“环境”变量,它更容易 –

回答

1

Log4j 2可以替换配置中的属性。属性值可以来自许多地方:系统属性,环境,线程上下文,资源包等。这些称为查找并需要前缀。例如,使用${sys:arbitrary.path}来查找系统属性中的值。请参阅Log4j 2手册的Lookups部分。

另一种方法就是你自己定义的arbitrary.path属性的配置:

<Configuration status="warn"> 
    <Properties> 
     <Property name="arbitrary.path">/some/path/"</Property> 
    </Properties> 
    ... 
+0

我想我明白我现在会怎么做。感谢您的链接到查找。 – ds390s

0

只是为了澄清,如果你提供的VM命令行参数的路径,你会使用sys查找前缀。当我试图使用jvmrunargsenv并且没有工作时,这在开始时让我感到困惑。

相关问题