1. 程式人生 > >使得“Log4J日誌檔案儲存路徑”可配置

使得“Log4J日誌檔案儲存路徑”可配置

使用Log4J日誌框架,可以配置將日誌記錄到檔案中,示例配置如下:

log4j.appender.A1=org.apache.log4j.RollingFileAppender
log4j.appender.A1.Threshold=INFO
log4j.appender.A1.File=log/info.log
log4j.appender.A1.Append=true
log4j.appender.A1.Encoding=GBK
log4j.appender.A1.MaxFileSize=256MB
log4j.appender.A1.MaxBackupIndex=60
log4j.appender
.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=[%d{yy-MM-dd HH:mm:ss}], [%p] [%l] -%m%n

上述配置中日誌檔案的儲存路徑是:當前專案路徑下“/log/info.log”。
有些應用場景中,日誌檔案的儲存路徑需要可配置。Log4J支援這種應用場景,具體是採用如下兩種配置形式:
log4j.appender.A1.File=${LOGDIR}/log/info.loglog4j.appender.A1.File=${env:LOGDIR}/log/info.log

一、第一種形式

Log4J日誌框架在載入的時候會使用相應的Java程序變數值去進行替換。比如說現在“LOGDIR”這個Java程序變數的值為“/home/dsl”,那麼log4j.appender.A1.File=${LOGDIR}/log/info.log最後會被替換成“log4j.appender.A1.File=/home/dsl/log/info.log”。

二、第二種形式

Log4J日誌框架在載入的時候會使用相應的系統環境變數值去進行替換。比如說現在“LOGDIR”這個系統環境變數的值為“/home/dsl”,那麼log4j.appender.A1.File=${env:LOGDIR}/log/info.log

最後會被替換成“log4j.appender.A1.File=/home/dsl/log/info.log”。
“Log4J 2.x”才支援第二種形式。其實“Log4J 2.x”不支援“Log4J 1.x”的“properties檔案格式”的配置形式,而只支援“XML檔案格式”的配置形式,示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
    <Appenders>
        <File name="MyFile" fileName="${env:LOGDIR}/logs/app.log">
            <PatternLayout>
                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
        </File>
        <Async name="Async">
            <AppenderRef ref="MyFile"/>
        </Async>
    </Appenders>
    <Loggers>
        <Root level="error">
            <AppenderRef ref="Async"/>
        </Root>
    </Loggers>
</Configuration>