我有一个类,我需要创建一个 csv 文件。所以到目前为止我所做的是:
创建了这个类:
public class MyPatternLayout extends PatternLayout {
@Override
public String getFileHeader() {
return "message id, file name, start time, end time, status";
}
}
我的 logback 文件配置如下:
<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>
好吧,我现在发生的事情是:
在我的日志文件中,标题显示了两次。似乎它尝试创建文件两次或类似的东西,因为如果我在文件名上使用时间戳,那么我创建了 2 个文件。
如果我停止应用程序并重新启动它,我的 csv 文件上会显示更多 2 个标题。
我的日志看起来像这样:
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
我需要做什么来解决这个问题?我只想在每个文件的开头显示标题。如果我停止并启动它应该确定文件上已经有一个标题并且不要添加它。