2016-03-15 73 views
0

我想在使用logback生成的日誌文件上打印標題行。我logback.xml包含以下用於此目的:使用logback在日誌文件中打印標題

<appender name="MyFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <File>path/to/logs/MyFile.log</File> 
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> 
     <layout class="ch.qos.logback.classic.PatternLayout"> 
     <fileHeader>Some header</fileHeader> 
     <pattern>%d{HH:mm:ss,SSS}:%m%n</pattern> 
     </layout> 
    </encoder> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <fileNamePattern>path/to/logs/MyFile.log.%d{yyyy-MM-dd}.%i</fileNamePattern> 
    </rollingPolicy> 
    </appender> 

時創建,然後頭被印在上面新的日誌文件所需的,但問題是,如果日誌文件已經存在,然後重新啓動tomcat的,頭是再次打印。我需要在每個日誌文件中僅打印一次標題。

我是新的logback。任何幫助將不勝感激。提前致謝。

+0

似乎沒有是那樣的一個選項(我認爲這必須是在RollingFileAppender進行,因爲這是檢測一個新的需要的地方文件)。Logback允許你插入你自己的appender(例如,通過子類RollingFileAppender),但如果你是新的logback,那麼它可能會超越上層。 –

回答

1

您可以創建一個customPatternLayout,擴展ch.qos.logback.classic.PatternLayout,您可以覆蓋getFileHeader並檢查該標題是否已存在。

下面的代碼爲我工作:

public class CustomLogPatternLayout extends PatternLayout { 

String filePath; 
String header; 

@Override 
public String getFileHeader() { 
    BufferedReader br; 
    boolean constainsHeader = false; 
    try { 
     br = new BufferedReader(new FileReader(filePath)); 
     String line = br.readLine(); 
     if (line != null) { 
      constainsHeader = true; 
     } 
     br.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    if (constainsHeader) { 
     return null; 
    } else { 
     return header; 
    } 

} 
相關問題