簡體   English   中英

log4j2-Cofiguration:替換log4j2配置文件中的系統變量值

[英]log4j2-Cofiguration : Replace system variable value in log4j2 configuration file

我正在使用外部 log4j 配置文件並使用帶有系統變量的文件附加程序來獲取日志文件名。 下面是我的文件追加器配置

<File name="File" fileName="${sys:LOG_BASE_DIR}/${sys:TalendJob.log}-${date:yyyyMMddHHmmss}.log">
                    <PatternLayout pattern="%d [%t] %-5p %c -$${ctx:InterfaceName:-}- %replace{%msg}{&quot;Password&quot; :\s+(\S+)}{Password : *****}%n" />
    </File>

${sys:TalendJob.log} 為我提供后綴為“.log”的值(例如 job1.log),我想替換 .log 但不確定如何實現它。 所以目前我的日志文件正在生成,如 job1.log-20220315030201.log 我想要 job1-20220315030201.log

${sys:TalendJob.log} 這個值不在我的控制之下。我的意思是它是由我無法更改的其他一些進程設置的。

那么我如何將 replace.log 替換為 '' 即為空

通過更改 Talend studio 設置,我設法對文件名進行了一些控制。
從項目設置 go 到 Build > Shell 設置 > Bat(假設您使用的是 Windows),並在 java 命令之后添加:

-DjobName=${talend.job.name} 

這將在生成的 bat 文件中創建一個系統屬性,名稱為 jobName 並將作業名稱作為值。 在此處輸入圖像描述

現在您可以更改 log4j2 配置以使用 jobName 而不是 TalendJob.log:

<File name="File" fileName="${sys:LOG_BASE_DIR}/${sys:jobName}-${date:yyyyMMddHHmmss}.log">
    <PatternLayout pattern="%d [%t] %-5p %c -$${ctx:InterfaceName:-}- %replace{%msg}{&quot;Password&quot; :\s+(\S+)}{Password : *****}%n" />
</File>

這僅在您獨立運行作業時有效(通過運行.bat)

Log4j 2.x 配置文件中有兩種占位符:

  • ${...}查找,到處都可以接受(參見文檔),
  • %{...}模式,僅由PatternLayout和一些其他組件解析(參見文檔)。

支持模式的組件屬性通常也支持運行時查找,但反之則不然。 不幸的是, FileAppenderfileName屬性不接受模式,而RollingFileAppenderfilePattern屬性只接受%d%i

要從 Java 屬性值中刪除.log ,您需要編寫自己的StrLookup

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM