2013-05-21 2 views
4

중간 .log 파일을 만들지 않고 gziped 로그 파일을 만들려면 log4j를 설정할 수 있습니까? 몇 가지 롤링 전략 (날짜순 등)이 있지만 압축되지 않은 파일이 먼저 생성됩니다.log4j - 즉석에서 로그 파일을 gz로 압축

+0

log4j는 롤링주기에 따라 로그를 생성합니다. 필요하지 않은 전략이 있다고 생각합니다. 수동으로 수행해야합니다. –

+2

자신이 작성한 appender를 작성한 경우에도 현재 로그를 갖고 싶습니다. 압축 파일에 직접 작성하는 것은 비용이 많이 듭니다. 로그를 메모리에 보관하고 (Jvm Halt의 경우 위험) zip 파일을 작성해야합니다. 왜 이걸 원해? – tgkprog

답변

0

이 작가를 사용하여이 작업을 해결할 수있다 : 압축이 낮은이며이 파일을 압축 해제하는 것이 항상 가능한 것은 아니다 : http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/coyote/http11/filters/FlushableGZIPOutputStream.html 및 코드 그것은 작동하지만 거기에 몇 가지 단점이 있습니다

Writer writer = new OutputStreamWriter(new FlushableGZIPOutputStream(newFileOutputStream(logFileName), LINES_TO_FLUSH)); 
appender.setWriter(writer); 

처럼. 그래서 저는 다시 돌아 왔습니다.

0

당신은 org.apache.log4j.rolling.TimeBasedRollingPolicy 시도 할 수 있습니다 :

<appender...> 
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> 
     <param name="FileNamePattern" value="/wombat/log.%d{yyyy-MM}**.gz**"/> 
    </rollingPolicy> 
</appender> 
3

당신은 당신이 appender는 자신 만의 최적화 된 구현을 구현하여 org.apache.log4j.RollingFileAppender 및 최우선 현재의 논리를 확장 소유 만들 수 있습니다 번역. 현재 파일을 압축하고이를 다른 로그 파일 (RollingFileAppender의 기본 구현)로 옮깁니다. 예 :

log4j.appender.{name}=br.com.sample.MyZipRollingFileAppender 

당신은 "구글"현재 파일을 압축하는 java.util.zip.ZipOutputStream의 또는 Java.util.zip.GZIPOutputStream에를 사용하여 구현 사례를 검색 할 수 있습니다.