2014-03-04 34 views
3

我需要在日誌的每N行中添加一個log4j標題和頁腳。我知道如何通過重寫PatternLayout類的getHeader()/ getFooter()方法來指定log4j頁眉/頁腳。但是,這似乎僅限於在每個滾動日誌文件(每天在我的情況下)中只包含頁眉/頁腳一次(頂部/底部)。每N行log4j標題

謝謝!

回答

2

子類化佈局類是不夠的。如果你還在你的案例中創建了你自己的appender的子類RollingFileAppender,那麼將會起作用。您可以重寫append()方法,以便它將寫入的行(實際上是寫入的記錄)計入文件,然後根據行數調用writeHeader()/ writeFooter()。

下面的實現允許用戶設置在該頭部將在配置文件中要寫入的頻率,經由headerFrequency屬性:

public class MyRollingFileAppender extends RollingFileAppender { 
    // number of lines after which the header is written 
    private int headerFrequency = -1; 
    // Count of lines written by the appender 
    private int nbLines = 0; 

    @Override 
    public void append(final LoggingEvent event) { 
    super.append(event); 
    nbLines++; 
    if ((headerFrequency > 0) && 
     (nbLines % headerFrequency == 0)) { 
     writeHeader(); 
    } 
    } 

    public int getHeaderFrequency() { 
    return headerFrequency; 
    } 

    public void setHeaderFrequency(final int headerFrequency) { 
    this.headerFrequency = headerFrequency; 
    } 
} 

佈局的以下實現允許你實際設置報頭文字log4j的配置文件中還有:

public class MyLayout extends PatternLayout { 
    // The header 
    private String header = null; 

    @Override 
    public String getHeader() { 
    return header; 
    } 

    public void setHeader(String header) { 
    this.header = header; 
    } 
} 

然後你可以在log4j的配置如下使用:

log4j.appender.CUSTOM=test.MyRollingFileAppender 
log4j.appender.CUSTOM.HeaderFrequency=100 
... other appender properties ... 
log4j.appender.CUSTOM.layout=test.MyLayout 
log4j.appender.CUSTOM.layout.Header=***** This is my header *****\n 
... other layout properties ... 

log4j.rootLogger=INFO, CUSTOM 
+0

有道理。謝謝! – user3377156

+0

很高興聽到。如果這解決了你的問題,你可能想要upvote的答案 – Lolo

+1

它不會讓我說,我需要至少15名聲譽。 – user3377156