2011-03-25 61 views
4

我在Log4J Extras中設置了一個TimeBasedRollingPolicy,我不清楚什麼時候告訴策略什麼時候翻身。 The API並不明確,所以我只是在做推論。這聽起來像是FileNamePattern中決定頻率的最後一個元素。什麼決定了log4j TimeBasedRollingPolicy何時翻轉?

拿這個例子從log4j Wiki

<appender name="ROLL" class="org.apache.log4j.rolling.RollingFileAppender"> 
    <!-- The active file to log to --> 
    <param name="file" value="/applogs/myportal/portal.log" /> 
    <param name="append" value="true" /> 
    <param name="encoding" value="UTF-8" /> 

    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> 
    <!-- The file to roll to, this is a fairly intelligent parameter, if the file 
     ends in .gz, it gzips it, based on the date stamp it rolls at that time, 
     default is yyyy-MM-dd, (rolls at midnight) 
    --> 
     <param name="FileNamePattern" value="/applogs/myportal/portal.%d.log.gz" /> 
    </rollingPolicy> 

    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%5p %d{ISO8601} [%t][%x] %c - %m%n" /> 
    </layout> 
</appender> 

我是假設,因爲該模式dd中結束,該政策是把自己改變的時候?與API中的示例相同,「yyyy-MM」模式意味着文件在MM更改時應該滾動?

謝謝!

保羅

回答

3

好吧,我必須仔細檢查,但我要說,只要通過格式化當前日期格式字符串的變化所產生的字符串,該文件被捲起。這意味着:如果您使用「yyyy-MM-dd」格式化日期,則結果每天都會改變。這隻會在「dd」時纔會發生,但是您每個月都會得到相同的文件名,因此這些文件被覆蓋,被追加或滾動失敗,因爲文件已經存在(不確定哪個是真的,取決於什麼appender會這樣做,我猜在這種情況下會附加日誌,除了gzip方式)。

編輯:

例如:如果你有mylog.%d{dd}.log,今天(2011-03-27)生成的日誌文件的名稱爲mylog.25.log(由於格式的新的日期()時記錄),並會追加消息該文件。明天,現在使用的文件名稱將爲mylog.26.log。在4月25日,您將再次獲得文件名`mylog.25.log,因此所有來自當天的日誌都將被追加到已包含3月25日日誌的文件中。

+0

你是絕對正確的。我不知道爲什麼我沒有這樣做,但我檢查了[源代碼](https://svn.apache.org/repos/asf/logging/log4j/companions/extras/trunk/src/main/ java/org/apache/log4j/rolling/TimeBasedRollingPolicy.java)用於TimeBasedRollingPolicy,在翻轉邏輯中是註釋「如果文件名沒有改變,不翻轉」。謝謝! – Paul 2011-03-25 15:44:51

0

我得到了這個工作。以下是log4j的代碼。您只需要在pom.xml中添加log4j-extras依賴項並使用以下代碼: 下面的代碼在每分鐘都會滾動並創建.zip文件。

<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">  
    <param name="FileNamePattern" value="/opt/app/srdotcom/logs/portal.%d{yyyy-MM-dd-HH-mm}.log.zip" /> 
</rollingPolicy> 

<layout class="org.apache.log4j.PatternLayout"> 
    <param name="ConversionPattern" value="%d{YYYY-MM-dd HH:mm:ss:SSS z}| %c{2}| %m%n" /> 
</layout> 

Maven依賴:

<dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>apache-log4j-extras</artifactId> 
     <version>1.2.17</version> 
    </dependency>