2016-07-28 2 views
1

나는 CSV 파일을 만드는 데 필요한 클래스가 있습니다.Logback을 사용하여 로그 파일에 헤더를 추가하는 방법은 무엇입니까?

이 클래스 생성 :

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 

? 각 파일의 시작 부분에만 헤더를 표시하고 싶습니다. 중지하고 시작하면 파일에 이미 헤더가 있음을 나타내야하며 추가하지 마십시오.

답변

0

글쎄, 나는 그것을 최선의 방법을하고있어 경우 모르겠지만, 나는이를 만들어이 문제를 해결하기 위해 :

@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; 
    } 

는 기본적으로,이 파일을 열고 라인을 통해 이동합니다 ... 머리글을 찾으면 나는 빈 상태로 돌아갑니다.

관련 문제