3
我需要在日誌的每N行中添加一個log4j標題和頁腳。我知道如何通過重寫PatternLayout類的getHeader()/ getFooter()方法來指定log4j頁眉/頁腳。但是,這似乎僅限於在每個滾動日誌文件(每天在我的情況下)中只包含頁眉/頁腳一次(頂部/底部)。每N行log4j標題
謝謝!
我需要在日誌的每N行中添加一個log4j標題和頁腳。我知道如何通過重寫PatternLayout類的getHeader()/ getFooter()方法來指定log4j頁眉/頁腳。但是,這似乎僅限於在每個滾動日誌文件(每天在我的情況下)中只包含頁眉/頁腳一次(頂部/底部)。每N行log4j標題
謝謝!
子類化佈局類是不夠的。如果你還在你的案例中創建了你自己的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
有道理。謝謝! – user3377156
很高興聽到。如果這解決了你的問題,你可能想要upvote的答案 – Lolo
它不會讓我說,我需要至少15名聲譽。 – user3377156