2012-04-10 4 views
0

로그백 파일에 두 개의 로그 파일 설정이 있습니다.프로그래밍 방식으로 로그 파일을 지우는 방법?

<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
       <fileNamePattern>/opt/loghome/${instance}/recon.%d{MM-dd-yyyy}.log.zip 
       </fileNamePattern> 
       <maxHistory>30</maxHistory> 
     </rollingPolicy> 
     <append>false</append> 
     <encoder> 
       <pattern>%d{MM/dd/yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%X{User} %msg%n</pattern> 
     </encoder> 
    </appender> 

    <appender name="datafile1" class="ch.qos.logback.core.FileAppender"> 
     <file>/opt/loghome/datafiles/file1.log</file> 
     <append>false</append> 
     <encoder> 
       <pattern>%msg%n</pattern> 
     </encoder> 
    </appender> 

는 자바에서 이들과 같이 설정되어 있습니다 :

private static final Logger logger = LoggerFactory 
       .getLogger(Main.class); 

private static final Logger logger = LoggerFactory 
       .getLogger("datafile1"); 

첫 번째는 표준 응용 프로그램 로그 파일입니다. 두 번째 프로그램은 db에서 얻은 데이터를 저장합니다.

프로그램은 로그 파일 내의 데이터를 비교하여 몇 가지 결과를 보냅니다. 이 작업이 끝나면이 로그 (datafile1)를 지우고 비어있어 다음 실행 준비가 완료됩니다. 어떻게해야합니까?

N.b 프로그램은이 작업을 실행하기 위해 스케줄러를 사용하는 24 시간 프로세스입니다. 작업이 실행될 때마다 다시 시작되지 않습니다.

답변

1

이 사용하여 종료 :

public void resetLogs() { 

    LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); 
    ContextInitializer ci = new ContextInitializer(lc); 
    lc.reset(); 
    try { 
     ci.autoConfig(); 
    } catch (JoranException e) { 
     e.printStackTrace(); 
    } 
} 

가 LoggerContext 컨텍스트를 새로 고치려면

2

로그 파일을 데이터 저장소로 사용하고있는 것으로 보입니까? 로그 파일은이를 위해 설계되지 않았으므로 실제로 로그 파일을 지우는 방법은 없습니다. 임시 위치에 데이터를 저장하려면 쓰기 위해 파일을 열고 기록하지 마십시오.

0

appender를 닫고 Logger에 다른 appender를 추가 할 수 있습니다. 여기에 예제 :

Logger logger = Logger.getLogger("datafile1"); 
logger.setLevel(Level.ALL); 

FileAppender appender = new FileAppender(new PatternLayout("%msg%n"), "/logs/datafile", false); 
Logger.getRootLogger().addAppender(appender); 

// log data 
logger.info("info1"); 

// here you remove and close the old appender 
Logger.getRootLogger().removeAppender(appender); 
appender.close(); 

// replace with a new one appender 
appender = new FileAppender(new PatternLayout("%msg%n"), "/logs/datafile", false); 
Logger.getRootLogger().addAppender(appender); 

// log new data 
logger.info("info2"); 
관련 문제