2016-07-12 103 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並且沒有工作時,這在開始時讓我感到困惑。

相關問題