【问题标题】:How to add a header on my log files using logback?如何使用 logback 在我的日志文件上添加标题?
【发布时间】:2016-07-28 17:29:25
【问题描述】:

我有一个类,我需要创建一个 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>

嗯,我现在发生的事情是:

  1. 在我的日志文件中,标题显示了两次。似乎它尝试创建文件两次或类似的东西,因为如果我在文件名上使用时间戳而不是创建 2 个文件。

  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

我需要做什么来解决这个问题?我只想在每个文件的开头显示标题。如果我停止并启动它应该确定文件上已经有一个标题并且不要添加它。

【问题讨论】:

    标签: csv logging logback logback-groovy


    【解决方案1】:

    好吧,不知道我是否做得最好,但为了解决这个问题,我做了这个:

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

    基本上,我打开文件并遍历这些行...如果我找到标题,我返回空...

    【讨论】:

    • 没有足够的检查文件是否存在并且至少有1行?
    猜你喜欢
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 2020-02-25
    • 2020-02-18
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    相关资源
    最近更新 更多