Ich habe eine Klasse, die ich brauche, um eine CSV-Datei zu erstellen. Also, was ich bisher getan habe, war, dass:Wie füge ich einen Header in meine Log-Dateien mit Logback?
diese Klasse Erstellt:
public class MyPatternLayout extends PatternLayout {
@Override
public String getFileHeader() {
return "message id, file name, start time, end time, status";
}
}
Und meine logback Datei wird wie folgt konfiguriert:
<appender name="METRICSTEST" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>metricstest.csv</file>
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>metricstest-%d{yyyy-ww}.csv.zip</fileNamePattern>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="com.mdw360.actuator.log.layout.MyPatternLayout">
<pattern>%msg%n</pattern>
</layout>
</encoder>
</appender>
<logger name="com.mdw360.actuator.tasks.MetricsLoggingTask" level="INFO" additivity="false">
<appender-ref ref="METRICSTEST" />
</logger>
Nun, was passiert, meine genau jetzt ist:
In meiner Protokolldatei wird die Kopfzeile zweimal angezeigt. Scheint, als ob er versucht, die Datei zweimal oder so ähnlich zu erstellen, denn wenn ich den Namen der Datei mit dem Zeitstempel bearbeite, habe ich 2 Dateien erstellt.
Wenn ich die Anwendung stoppe und neu starte, werden mehr 2 Header in meiner CSV-Datei angezeigt.
Mein Protokoll wird wie folgt aussehen:
message id, file name, start time, end time, status
message id, file name, start time, end time, status
First Line
Second Line
Stop Application
message id, file name, start time, end time, status
message id, file name, start time, end time, status
First Line
Second Line
Stop Application
Was muss ich tun, um dieses Problem zu beheben? Ich möchte den Header nur am Anfang jeder Datei anzeigen. Wenn ich stoppe und starte, sollte es erkennen, dass es bereits einen Header für die Datei gibt und nicht hinzufügen.