본문 바로가기

컴퓨터/IT

[펌] Log4j - DailyRollingAppender 문제

Log4j의 DailyRollingAppender를 다중 인스턴스 환경에서 사용할 때 파일의 전환이 제대로 이루어지지 않고 로그가 유실되는 등의 문제가 있다.  이것은 소스코드 자체의 문제로서 DailyRollingAppender의 파일 전환 부분을 다음과 같이 수정하면 해결할 수 있다.

  // append flag
        boolean appendFlag = false;
       
        // 이미 파일 전환이 이루어졌다면 rename 하지 않게 처리
        if ( !target.exists() ) {
            File file = new File( fileName );
            boolean result = file.renameTo( target );
            if ( result ) {
                LogLog.debug( fileName + " -> " + scheduledFilename );
            }
            else {
                LogLog.error( "Failed to rename [" + fileName + "] to [" + scheduledFilename + "]." );
            }
        } else {
            // 이미 파일전환이 되었다면 추가모드
            appendFlag = true;
        }         try {
            // This will also close the file. This is OK since multiple
            // close operations are safe.
            this.setFile( fileName, appendFlag, this.bufferedIO, this.bufferSize );
        }
        catch ( IOException e ) {
            errorHandler.error( "setFile(" + fileName + ", false) call failed." );
        }

현재 이 내용은 버그리포트에도 올라와 있고 1.3에서는 해결이 된다고 하는데 release가 계속 늦어지고 있는 모양이다.  그 때까지는 아래 파일을 다운로드 하고 DailyRollingAppender 대신에 ExtDailyRollingAppender 를 지정한 후 같은 방식으로 사용하면 된다.

-------------------------------------------------------------------------------------------

내용중 ExtDailyRollingAppender는 ExtDailyRollingFileAppender로 변경해야 한다.

내가 처했던 문제는 하루가 지나 로그가 다시 생성이 될 경우 여러 프로그램이 하나의 로그파일로 공유를 할때 로그가 유실되는.. ( 어느 프로그램은 로그를 남기고 나머지 프로그램이 로그를 작성하지 못하는) 경우 였다. ERROR Failed to rename XXX to XXX 이렇게 되는 경우 일것이다.
출처 : http://riosung.tistory.com/7