2011-04-18 1 views
4

log4j를 사용하는 데 문제가 있다고 생각합니다. 나는 bufferedio 수 있도록하기 위해 노력하고있어,하지만 8킬로바이트의 기본 버퍼 크기는 내가 버퍼에 대해 서로 다른 크기를 시도했지만 파일에 쓰기 만하면 버퍼에 도달 일어나는Log4J : FileAppender에서 bufferedIO = true로 bufferSize를 변경할 수 없습니다.

<appender name="MyAppender" class="org.apache.log4j.FileAppender"> 
    <param name="bufferedIO" value="true"/> 
    <param name="bufferSize" value="512"/> 
    <param name="Append" value="true"/> 
    <param name="File" value="C:/MyMonitor.log"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{dd/MM/yyyy HH:mm:ss}|%m%n"/> 
    </layout> 
</appender> 

<logger name="com.mypackage.MyMonitor"> 
    <level value="debug"/> 
    <appender-ref ref="MyAppender"/> 
</logger> 

내 현재의 요구에 너무 큰 8KB.

동일한 문제가있는 다른 사람 (해결책 없음)을 찾을 수있는 경우에도 Log4J에서이 문제를 설명하는 버그를 찾을 수 없습니다.

Log4J 디버그를 사용하면 내 appender에 적절한 버퍼 크기가 표시되므로 아무도 내 구성을 덮어 쓰지 않는다고 생각됩니다.

내가 뭘 잘못하고 있는지 알기 원하십니까? Log4J의 버그 또는 한계입니까?

감사합니다.

답변

1

대문자에서 시작하여 buffereredIO를 소문자로 시작하고 BufferSize를 쓴 것으로 보았습니다. Java는 기본적으로 대/소문자를 구분하므로 모든 매개 변수를 constructor (bufferSize를 소문자로 표시해야 함)처럼 보이게하십시오.

FileAppender는 더 이상 사용되지 않습니다. WriterAppender이 가장 가까운 대체품입니다. 소스 코드에

+0

FileAppender는 더 이상 사용되지 않습니다. WriterAppender는 FileAppender (http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/FileAppender.html)의 부모 클래스입니다. – dertoni

+0

@dertoni 아, 죄송합니다. 네가 옳아. 그럼, 제 제안은 어떨까요? 작동 했나요? –

+0

매개 변수를 bufferSize로 변경하려고 시도했지만 결과가 동일합니다. (사실, 솔루션을 찾기 위해 BufferSize를 사용하는 많은 예제를 발견했습니다. –

0

의 log4j 1.2.17

다이브, 나는 로그 파일에 문자를 작성하는 DailyRollingFileAppender 사용을 java.io.OutputStreamWriter을 찾을 수 있습니다. Threre는 OutputStreamWriter의 버퍼입니다. 크기는이 때문에 두 번째 캐시의

1.7, 당신은 발견 할 것이다 JDK에서 8K (8192)입니다 : 당신이 log4j.appender.file.bufferSize = 8192을 설정 한 경우에도 로그 데이터는 이상의 8192 (< =입니다 8192 * 2), 로그 파일에는 데이터가 없습니다. 그 이유는 두 번째 캐시 (OutputStreamWriter)가 처음 8192 개의 문자를 보유하고 DailyRollingFileAppender 캐시가 나머지를 보유하기 때문입니다.

JDK의 API java.io.OutputStreamWriter는 :

쓰기() 메서드를 호출 할 때마다 인코딩 컨버터가 지정된 문자 (들)에 호출됩니다. 결과의 바이트는 기본 출력 스트림에 기록되기 전에 버퍼에 누적됩니다. 이 버퍼의 크기는 지정 될 수 있지만 기본적으로 대부분의 용도에 충분히 큽니다. write() 메서드에 전달 된 문자는 버퍼링되지 않습니다.

관련 문제