Log4j2中RollingFile的文件滾動更新機制

1、什麼是RollingFile

RollingFileAppender是Log4j2中的一種可以實現日誌文件滾動更新(rollover)的Appender。html

rollover的意思是當知足必定條件(如文件達到了指定的大小,達到了指定的時間)後,就重命名原日誌文件進行歸檔,並生成新的日誌文件用於log寫入。若是還設置了必定時間內容許歸檔的日誌文件的最大數量,將對過舊的日誌文件進行刪除操做。java

RollingFile實現日誌文件滾動更新,依賴於TriggeringPolicy和RolloverStrategy。正則表達式

其中,TriggeringPolicy爲觸發策略,其決定了什麼時候觸發日誌文件的rollover,即When。apache

RolloverStrategy爲滾動更新策略,其決定了當觸發了日誌文件的rollover時,如何進行文件的rollover,即How。api

Log4j2提供了默認的rollover策略DefaultRolloverStrategy。oracle

下面經過一個log4j2.xml文件配置簡單瞭解RollingFile的配置。app

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<? xml  version = "1.0"  encoding = "UTF-8" ?>
< Configuration  status = "warn" >
   < Appenders >
     < RollingFile  name = "RollingFile"  fileName = "logs/app.log"
                  filePattern = "logs/app-%d{yyyy-MM-dd HH}.log" >
       < PatternLayout >
         < Pattern >%d %p %c{1.} [%t] %m%n</ Pattern >
       </ PatternLayout >
       < Policies >
         < TimeBasedTriggeringPolicy  interval = "1" />
         < SizeBasedTriggeringPolicy  size = "250MB" />
       </ Policies >
     </ RollingFile >
   </ Appenders >
   < Loggers >
     < Root  level = "error" >
       < AppenderRef  ref = "RollingFile" />
     </ Root >
   </ Loggers >
</ Configuration >

上述配置文件中配置了一個RollingFile,日誌寫入logs/app.log文件中,每通過1小時或者當文件大小到達250M時,按照app-2017-08-01 12.log的格式對app.log進行重命名並歸檔,並生成新的文件用於寫入log。測試

其中,fileName指定日誌文件的位置和文件名稱(若是文件或文件所在的目錄不存在,會建立文件。)spa

filePattern指定觸發rollover時,文件的重命名規則。filePattern中能夠指定相似於SimpleDateFormat中的date/time pattern,如yyyy-MM-dd HH,或者%i指定一個整數計數器。日誌

TimeBasedTriggeringPolicy指定了基於時間的觸發策略。
SizeBasedTriggeringPolicy指定了基於文件大小的觸發策略。

2、TriggeringPolicy

RollingFile的觸發rollover的策略有CronTriggeringPolicy(Cron表達式觸發)、OnStartupTriggeringPolicy(JVM啓動時觸發)、SizeBasedTriggeringPolicy(基於文件大小)、TimeBasedTriggeringPolicy(基於時間)、CompositeTriggeringPolicy(多個觸發策略的混合,如同時基於文件大小和時間)。

其中,SizeBasedTriggeringPolicy(基於日誌文件大小)、TimeBasedTriggeringPolicy(基於時間)或同時基於文件大小和時間的混合觸發策略最經常使用。

SizeBasedTriggeringPolicy

SizeBasedTriggeringPolicy規定了當日志文件達到了指定的size時,觸發rollover操做。size參數能夠用KB、MB、GB等作後綴來指定具體的字節數,如20MB。

< SizeBasedTriggeringPolicy  size = "250MB" />

TimeBasedTriggeringPolicy

TimeBasedTriggeringPolicy規定了當日志文件名中的date/time pattern再也不符合filePattern中的date/time pattern時,觸發rollover操做。

好比,filePattern指定文件重命名規則爲app-%d{yyyy-MM-dd HH}.log,文件名爲app-2017-08-25 11.log,當時間達到2017年8月25日中午12點(2017-08-25 12),將觸發rollover操做。

參數名
類型
描述
interval integer

此參數須要與filePattern結合使用,規定了觸發rollover的頻率,默認值爲1。假設interval爲4,若filePattern的date/time pattern的最小時間粒度爲小時(如yyyy-MM-dd HH),則每4小時觸發一次rollover;若filePattern的date/time pattern的最小時間粒度爲分鐘(如yyyy-MM-dd HH-mm),則每4分鐘觸發一次rollover。

modulate boolean

指明是否對interval進行調節,默認爲false。若modulate爲true,會以0爲開始對interval進行偏移計算。例如,最小時間粒度爲小時,當前爲3:00,interval爲4,則之後觸發rollover的時間依次爲4:00,8:00,12:00,16:00,...。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<? xml  version = "1.0"  encoding = "UTF-8" ?>
< Configuration  status = "warn"  name = "MyApp"  packages = "" >
   < Appenders >
     < RollingFile  name = "RollingFile"  fileName = "logs/app.log"
                  filePattern = "logs/app-%d{yyyy-MM-dd HH}-%i.log" >
       < PatternLayout >
         < Pattern >%d %p %c{1.} [%t] %m%n</ Pattern >
       </ PatternLayout >
       < Policies >
         < TimeBasedTriggeringPolicy  />
         < SizeBasedTriggeringPolicy  size = "250 MB" />
       </ Policies >
     </ RollingFile >
   </ Appenders >
   < Loggers >
     < Root  level = "error" >
       < AppenderRef  ref = "RollingFile" />
     </ Root >
   </ Loggers >
</ Configuration >

上述配置文件中,filePattern中yyyy-MM-dd HH最小時間粒度爲小時,TimeBasedTriggeringPolicy中interval使用默認值1,將每1小時觸發一次rollover。

若將filePattern改成filePattern=「logs/app-%d{yyyy-MM-dd HH-mm}-%i.log」,yyyy-MM-dd HH-mm最小時間粒度爲分鐘,將每1分鐘觸發一次rollover。

CompositeTriggeringPolicy

將多個TriggeringPolicy放到Policies中表示使用複合策略

< Policies >
     < TimeBasedTriggeringPolicy  />
     < SizeBasedTriggeringPolicy  size = "250 MB" />
</ Policies >

如上,同時使用了TimeBasedTriggeringPolicy、SizeBasedTriggeringPolicy,有一個條件知足,就會觸發rollover。

3、DefaultRolloverStrategy

DefaultRolloverStrategy指定了當觸發rollover時的默認策略。

DefaultRolloverStrategy是Log4j2提供的默認的rollover策略,即便在log4j2.xml中沒有顯式指明,也至關於爲RollingFile配置下添加了以下語句。DefaultRolloverStrategy默認的max爲7。

< DefaultRolloverStrategy  max = "7" />

 max參數指定了計數器的最大值。一旦計數器達到了最大值,過舊的文件將被刪除。

注意:不要認爲max參數是須要保留的日誌文件的最大數目。

 

max參數是與filePattern中的計數器%i配合起做用的,其具體做用方式與filePattern的配置密切相關。

1.若是filePattern中僅含有date/time pattern,每次rollover時,將用當前的日期和時間替換文件中的日期格式對文件進行重命名。max參數將不起做用。

如,filePattern="logs/app-%d{yyyy-MM-dd}.log"

2.若是filePattern中僅含有整數計數器(即%i),每次rollover時,文件重命名時的計數器將每次加1(初始值爲1),若達到max的值,將刪除舊的文件。

如,filePattern="logs/app-%i.log"

3.若是filePattern中既含有date/time pattern,又含有%i,每次rollover時,計數器將每次加1,若達到max的值,將刪除舊的文件,直到data/time pattern再也不符合,被替換爲當前的日期和時間,計數器再從1開始。

如,filePattern="logs/app-%d{yyyy-MM-dd HH-mm}-%i.log"

 

假設fileName爲logs/app.log,SizeBasedTriggeringPolicy的size爲10KB,DefaultRolloverStrategy的max爲3。

根據filePattern配置的不一樣分爲如下幾種狀況:

狀況1:filePattern中僅含有date/time pattern

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<? xml  version = "1.0"  encoding = "UTF-8" ?>
< Configuration  status = "trace"  name = "MyApp"  packages = "" >
     < Appenders >
         < Console  name = "Console"  target = "SYSTEM_OUT" >
             < PatternLayout  pattern = "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"  />
         </ Console >
         < RollingFile  name = "RollingFile"  fileName = "logs/app.log"
         filePattern = "logs/app-%d{yyyy-MM-dd}.log" >
             < PatternLayout >
                 < Pattern >%d %p %c{1.} [%t] %m%n</ Pattern >
             </ PatternLayout >
             < Policies >
                 < SizeBasedTriggeringPolicy  size = "10KB" />
             </ Policies >
             < DefaultRolloverStrategy  max = "3" />
         </ RollingFile >
     </ Appenders >
     < Loggers >
         < Root  level = "trace" >
             < AppenderRef  ref = "Console" />
             < AppenderRef  ref = "RollingFile" />
         </ Root >
     </ Loggers >
</ Configuration >
filePattern="logs/app-%d{yyyy-MM-dd}.log",指定當發生rollover時,將按照app-%d{yyyy-MM-dd}.log的格式對文件進行重命名。

每次觸發rollover時,將按照以下方式對文件進行rollover。

第X次rollover
當前用於寫入log的文件
歸檔的文件
描述
0 app.log - 全部的log都寫進app.log中。
1 app.log app-2017-08-17.log

當app.log的size達到10KB,觸發第1次rollover,app.log被重命名爲app-2017-08-17.log。新的app.log被建立出來,用於寫入log。

2 app.log

app-2017-08-17.log

當app.log的size達到10KB,觸發第2次rollover,原來的app-2017-08-17.log將刪除。app.log被重命名爲app-2017-08-17.log。新的app.log文件被建立出來,用於寫入log。

狀況2:filePattern中僅含有整數計數器(%i)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<? xml  version = "1.0"  encoding = "UTF-8" ?>
< Configuration  status = "trace"  name = "MyApp"  packages = "" >
     < Appenders >
         < Console  name = "Console"  target = "SYSTEM_OUT" >
             < PatternLayout  pattern = "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"  />
         </ Console >
         < RollingFile  name = "RollingFile"  fileName = "logs/app.log"
         filePattern = "logs/app-%i.log" >
             < PatternLayout >
                 < Pattern >%d %p %c{1.} [%t] %m%n</ Pattern >
             </ PatternLayout >
             < Policies >
                 < SizeBasedTriggeringPolicy  size = "10KB" />
             </ Policies >
             < DefaultRolloverStrategy  max = "3" />
         </ RollingFile >
     </ Appenders >
     < Loggers >
         < Root  level = "trace" >
             < AppenderRef  ref = "Console" />
             < AppenderRef  ref = "RollingFile" />
         </ Root >
     </ Loggers >
</ Configuration >
filePattern="logs/app-%i.log",其他配置同上。

每次觸發rollover時,將按照以下方式對文件進行rollover。

第X次rollover
當前用於寫入log的文件
歸檔的文件
描述
0 app.log - 全部的log都寫進app.log中。
1 app.log app-1.log

當app.log的size達到10KB,觸發第1次rollover,app.log被重命名爲app-1.log。新的app.log被建立出來,用於寫入log。

2 app.log

app-1.log

app-2.log

當app.log的size達到10KB,觸發第2次rollover,app.log被重命名爲app-2.log。新的app.log被建立出來,用於寫入log。

3 app.log

app-1.log

app-2.log

app-3.log

當app.log的size達到10KB,觸發第3次rollover,app.log被重命名爲app-3.log。新的app.log被建立出來,用於寫入log。

4 app.log

app-1.log

app-2.log

app-3.log

當app.log的size達到10KB,觸發第4次rollover,app-1.log被刪除(即最初的、最舊的app.log)。app-2.log被重命名爲app-1.log,app-3.log被重命名爲app-2.log,app.log被重命名爲app-3.log。新的app.log被建立出來,用於寫入log。

狀況3:若是filePattern中既含有date/time pattern,又含有%i計數器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<? xml  version = "1.0"  encoding = "UTF-8" ?>
< Configuration  status = "trace"  name = "MyApp"  packages = "" >
     < Appenders >
         < Console  name = "Console"  target = "SYSTEM_OUT" >
             < PatternLayout  pattern = "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"  />
         </ Console >
         < RollingFile  name = "RollingFile"  fileName = "logs/app.log"
         filePattern = "logs/app-%d{yyyy-MM-dd HH-mm}-%i.log" >
             < PatternLayout >
                 < Pattern >%d %p %c{1.} [%t] %m%n</ Pattern >
             </ PatternLayout >
             < Policies >
                 < TimeBasedTriggeringPolicy  />
                 < SizeBasedTriggeringPolicy  size = "10KB" />
             </ Policies >
             < DefaultRolloverStrategy  max = "3" />
         </ RollingFile >
     </ Appenders >
     < Loggers >
         < Root  level = "trace" >
             < AppenderRef  ref = "Console" />
             < AppenderRef  ref = "RollingFile" />
         </ Root >
     </ Loggers >
</ Configuration >
filePattern="logs/app-%d{yyyy-MM-dd HH-mm}-%i.log",同時指定了TimeBasedTriggeringPolicy和SizeBasedTriggeringPolicy的觸發策略,每1分鐘或者文件大小達到10KB,將觸發rollover。

每次觸發rollover時,將按照以下方式對文件進行rollover。

第X次rollover
當前用於寫入log的文件
歸檔的文件
描述
0 app.log - 全部的log都寫進app.log中。
1 app.log app-2017-08-17 20-52-1.log

當app.log的size達到10KB,觸發第1次rollover,app.log被重命名爲app-2017-08-17 20-52-1.log。新的app.log被建立出來,用於寫入log。

2 app.log

app-2017-08-17 20-52-1.log

app-2017-08-17 20-52-2.log

當app.log的size達到10KB,觸發第2次rollover,app.log被重命名爲app-2017-08-17 20-52-2.log。新的app.log被建立出來,用於寫入log。

3 app.log

app-2017-08-17 20-52-1.log

app-2017-08-17 20-52-2.log

app-2017-08-17 20-52-3.log

當app.log的size達到10KB,觸發第3次rollover,app.log被重命名爲app-2017-08-17 20-52-3.log.log。新的app.log被建立出來,用於寫入log。

4 app.log

app-2017-08-17 20-52-1.log

app-2017-08-17 20-52-2.log

app-2017-08-17 20-52-3.log

當app.log的size達到10KB,觸發第4次rollover,因計數器的值到達max值,app-2017-08-17 20-52-1.log被刪除(即最初的、最舊的app.log)。app-2017-08-17 20-52-2.log被重命名爲app-2017-08-17 20-52-1.log,app-2017-08-17 20-52-3.log被重命名爲app-2017-08-17 20-52-2.log,app.log被重命名爲app-2017-08-17 20-52-3.log。新的app.log被建立出來,用於寫入log。

5 app.log

app-2017-08-17 20-52-1.log

app-2017-08-17 20-52-2.log

app-2017-08-17 20-52-3.log

當前時間變爲app-2017-08-17 20-53,觸發第5次rollover,app-2017-08-17 20-52-1.log被刪除。app-2017-08-17 20-52-2.log被重命名爲app-2017-08-17 20-52-1.log,app-2017-08-17 20-52-3.log被重命名爲app-2017-08-17 20-52-2.log,app.log被重命名爲app-2017-08-17 20-52-3.log。新的app.log被建立出來,用於寫入log。
6 app.log

app-2017-08-17 20-52-1.log

app-2017-08-17 20-52-2.log

app-2017-08-17 20-52-3.log

app-2017-08-17 20-53-1.log

當app.log的size達到10KB,觸發第6次rollover,app.log被重命名爲app-2017-08-17 20-53-1.log。新的app.log被建立出來,用於寫入log。

 

總結:

1.max參數是與filePattern中的計數器%i配合起做用的,若filePattern爲filePattern="logs/app-%d{yyyy-MM-dd}.log">,因爲沒有設置%i計數器,max參數將不起做用。

2.max參數不是須要保留的文件的最大個數。如狀況3,日誌文件date/time pattern再也不符合filePattern時,計算器將被重置爲1,日誌總個數超過了max的指定值。

可認爲max參數規定了必定時間範圍內歸檔文件的最大個數。

4、DeleteAction

DefaultRolloverStrategy制定了默認的rollover策略,經過max參數可控制必定時間範圍內歸檔的日誌文件的最大個數。

Log4j 2.5 引入了DeleteAction,使用戶能夠本身控制刪除哪些文件,而不只僅是經過DefaultRolloverStrategy的默認策略。

注意:經過DeleteAction能夠刪除任何文件,而不只僅像DefaultRolloverStrategy那樣,刪除最舊的文件,因此使用的時候須要謹慎!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<? xml  version = "1.0"  encoding = "UTF-8" ?>
< Configuration  status = "warn"  name = "MyApp"  packages = "" >
   < Properties >
     < Property  name = "baseDir" >logs</ Property >
   </ Properties >
   < Appenders >
     < RollingFile  name = "RollingFile"  fileName = "${baseDir}/app.log"
           filePattern = "${baseDir}/app-%d{yyyy-MM-dd}.log.gz" >
       < PatternLayout  pattern = "%d %p %c{1.} [%t] %m%n"  />
       < CronTriggeringPolicy  schedule = "0 0 0 * * ?" />
       < DefaultRolloverStrategy >
         < Delete  basePath = "${baseDir}"  maxDepth = "2" >
           < IfFileName  glob = "*/app-*.log.gz"  />
           < IfLastModified  age = "60d"  />
         </ Delete >
       </ DefaultRolloverStrategy >
     </ RollingFile >
   </ Appenders >
   < Loggers >
     < Root  level = "error" >
       < AppenderRef  ref = "RollingFile" />
     </ Root >
   </ Loggers >
</ Configuration >

上述配置文件中,Delete部分即是配置DeleteAction的刪除策略,指定了當觸發rollover時,刪除baseDir文件夾或其子文件下面的文件名符合app-*.log.gz且距離最後的修改日期超過60天的文件。

其中,basePath指定了掃描開始路徑,爲baseDir文件夾。maxDepth指定了目錄掃描深度,爲2表示掃描baseDir文件夾及其子文件夾。

IfFileName指定了文件名需知足的條件,IfLastModified指定了文件修改時間須要知足的條件。

DeleteAction經常使用參數以下:

參數名
類型
描述
basePath String

必填。目錄掃描開始路徑。

 

maxDepth int

掃描的最大目錄深度。0表示basePath指定的文件自身。Integer.MAX_VALUE表示掃描全部的目錄層。默認值爲1,表示僅掃描basePath下的文件。

testMode boolean

若是爲true,實際的文件不會被刪除,刪除文件的信息會打印到log4j2的INFO級別的log中。可以使用此參數測試配置是否符合預測。默認爲false。

pathConditions PathCondition[]

刪除文件的過濾條件,知足指定條件的文件將會被刪除,能夠指定一個或多個。

若是指定多個pathCondition,須要同時知足。Conditions能夠嵌套,當嵌套配置時,只有當知足了外部的contion時,才能對內部的condition進行判斷。若是Conditions不是嵌套的,會可能以任意順序進行判斷。

Conditions也能夠經過使用IfAll,IfAny,IfNot等相似於AND,OR,NOT的condition,實現複雜的condition。

  • IfFileName-判斷文件的文件名是否知足正則表達式或glob表達式
  • IfLastModified-判斷文件的修改時間是否早於指定的duration
  • IfAccumulatedFileCount-判斷在遍歷文件樹的時候,文件個數是否超過了指定值
  • IfAccumulatedFileSize-判斷在遍歷文件樹的時候,文件的總大小是否超過了指定值
  • IfAll-判斷嵌套的condition是否都知足
  • IfAny-判斷嵌套的condition是否有一個知足
  • IfNot-判斷嵌套的condition是否不知足

5、程序測試demo

public  class  HelloWorld {
 
     public  static  void  main(String[] args) {
         Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
         try {
             //經過打印i,日誌文件中數字越小表明越老
             for ( int  i =  0 ; i <  50000 ; i++) {
                 logger.info( "{}" , i);
                 logger.info( "logger.info\n" );
                 Thread.sleep( 100 ); //爲了防止50000條很快跑完,sleep一段時間
             }
         catch  (InterruptedException e) {}
     }
}

1.測試基於時間觸發

filePattern最小時間粒度爲秒,將每5秒觸發一次rollover

<? xml  version = "1.0"  encoding = "UTF-8" ?>
< Configuration  status = "trace"  name = "MyApp"  packages = "" >
     < Appenders >
         < Console  name = "Console"  target = "SYSTEM_OUT" >
             < PatternLayout  pattern = "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"  />
         </ Console >
         <!--<RollingFile name="RollingFile" fileName="logs/app.log"-->
                      <!--filePattern="logs/app-%d{yyyy-MM-dd HH}-%i.log">-->
         < RollingFile  name = "RollingFile"  fileName = "logs/app.log"
                      filePattern = "logs/app-%d{yyyy-MM-dd HH-mm-ss}.log" >
             < PatternLayout >
                 < Pattern >%d %p %c{1.} [%t] %m%n</ Pattern >
             </ PatternLayout >
             < Policies >
                 <!--當通過了interval時間後,將根據filePattern對文件進行重命名,並生成新的文件用於日誌寫入-->
                 < TimeBasedTriggeringPolicy  interval = "5" />
                 <!--當日志文件大小大於size時,將根據filepattern對文件進行重命名,並生成新的文件用於日誌寫入-->
                 <!--<SizeBasedTriggeringPolicy size="30KB"/>-->
             </ Policies >
             < DefaultRolloverStrategy  max = "3" />
         </ RollingFile >
     </ Appenders >
     < Loggers >
         < Root  level = "trace" >
             < AppenderRef  ref = "Console" />
             < AppenderRef  ref = "RollingFile" />
         </ Root >
     </ Loggers >
</ Configuration >

2.測試基於文件大小的觸發

日誌文件達到5KB,將觸發rollover

<? xml  version = "1.0"  encoding = "UTF-8" ?>
< Configuration  status = "trace"  name = "MyApp"  packages = "" >
     < Appenders >
         < Console  name = "Console"  target = "SYSTEM_OUT" >
             < PatternLayout  pattern = "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"  />
         </ Console >
         <!--<RollingFile name="RollingFile" fileName="logs/app.log"-->
                      <!--filePattern="logs/app-%d{yyyy-MM-dd HH}-%i.log">-->
         < RollingFile  name = "RollingFile"  fileName = "logs/app.log"
                      filePattern = "logs/app-%d{yyyy-MM-dd HH-mm-ss}.log" >
             < PatternLayout >
                 < Pattern >%d %p %c{1.} [%t] %m%n</ Pattern >
             </ PatternLayout >
             < Policies >
                 <!--當通過了interval時間後,將根據filePattern對文件進行重命名,並生成新的文件用於日誌寫入-->
                 <!--<TimeBasedTriggeringPolicy interval="5"/>-->
                 <!--當日志文件大小大於size時,將根據filepattern對文件進行重命名,並生成新的文件用於日誌寫入-->
                 < SizeBasedTriggeringPolicy  size = "5KB" />
             </ Policies >
             < DefaultRolloverStrategy  max = "3" />
         </ RollingFile >
     </ Appenders >
     < Loggers >
         < Root  level = "trace" >
             < AppenderRef  ref = "Console" />
             < AppenderRef  ref = "RollingFile" />
         </ Root >
     </ Loggers >
</ Configuration >

3.測試DefaultRolloverStrategy的max參數和%i計數器的搭配使用

注意filePattern最小時間粒度爲分鐘,且含%i計數器

<? xml  version = "1.0"  encoding = "UTF-8" ?>
< Configuration  status = "trace"  name = "MyApp"  packages = "" >
     < Appenders >
         < Console  name = "Console"  target = "SYSTEM_OUT" >
             < PatternLayout  pattern = "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"  />
         </ Console >
         < RollingFile  name = "RollingFile"  fileName = "logs/app.log"
                      filePattern = "logs/app-%d{yyyy-MM-dd HH-mm}-%i.log" >
         <!--<RollingFile name="RollingFile" fileName="logs/app.log"-->
                      <!--filePattern="logs/app-%d{yyyy-MM-dd HH-mm-ss}.log">-->
             < PatternLayout >
                 < Pattern >%d %p %c{1.} [%t] %m%n</ Pattern >
             </ PatternLayout >
             < Policies >
                 <!--當通過了interval時間後,將根據filePattern對文件進行重命名,並生成新的文件用於日誌寫入-->
                 <!--<TimeBasedTriggeringPolicy interval="5"/>-->
                 <!--當日志文件大小大於size時,將根據filepattern對文件進行重命名,並生成新的文件用於日誌寫入-->
                 < SizeBasedTriggeringPolicy  size = "5KB" />
             </ Policies >
             < DefaultRolloverStrategy  max = "3" />
         </ RollingFile >
     </ Appenders >
     < Loggers >
         < Root  level = "trace" >
             < AppenderRef  ref = "Console" />
             < AppenderRef  ref = "RollingFile" />
         </ Root >
     </ Loggers >
</ Configuration >

 

6、參考資料

http://logging.apache.org/log4j/2.x/manual/appenders.html  RollingFileAppender部分

相關文章
相關標籤/搜索