2014-09-18 3 views
2

log4j2에 대해 다음 구성을 사용 중이며 디스크로 플러시되기 전에 메모리에 로그 문이 저장된다는 것을 알았습니다. 디스크로 플러시되기 전에 메모리에 얼마나 많은 메시지가 저장되도록 설정하는 설정이 있습니까?log4j2 AsyncLogger의 메모리 사용량

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="debug" name="TestApp" packages=""> 
    <Appenders> 
    <RollingRandomAccessFile name="RollingRandomAccessFile" fileName="logs/test.log" immediateFlush="false" append="false" 
       filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> 
     <PatternLayout> 
     <Pattern>%d %p %c{1.} [%t] %m %ex%n</Pattern> 
     </PatternLayout> 
     <Policies> 
     <TimeBasedTriggeringPolicy /> 
     <SizeBasedTriggeringPolicy size="500 MB"/> 
     </Policies> 
    </RollingRandomAccessFile> 
    </Appenders> 
    <Loggers> 
     <AsyncLogger name="FATAL_LOGGER" level="fatal" includeLocation="true" additivity="false"> 
     <AppenderRef ref="RollingRandomAccessFile"/> 
    </AsyncLogger> 
    <Root level="debug" includeLocation="false"> 
     <AppenderRef ref="RollingRandomAccessFile"/> 
    </Root> 
    </Loggers> 
</Configuration> 
+1

더 많은 사람들이 실제로 대답하는 것보다 편집하는 것에 관심이있는 것 같습니다. 나는 편집이 중요하다는 것을 알고 있지만 누구도 대답을 알지 못했던 사람이 원래의 형식에 따라 실제 질문을 잘못 이해했다고 생각합니다. –

답변

0

당신은 AsyncLogger.RingBufferSize 값을 변경할 수 있습니다 (256*1024 & 최소 기본값은 128입니다). 이렇게하면 디스크로 플러시되기 전에 할당되는 객체 수를 구성하는 데 도움이됩니다.

+0

config 또는 system 속성을 설정하는 가장 좋은 방법은 무엇입니까? 실례가 있습니까? –

2

버퍼 크기를 제어 할 수 있지만 디스크로 플러시되기 전에 메모리에 저장되는 메시지 수를 제어 할 수는 없습니다. 이것은 메시지가 생성되는 속도와 소비되는 속도의 함수입니다. 큐 크기가 너무 작고 버스트 동안 버퍼가 가득차면 logger.log (...) 호출은 버퍼에서 공간을 다시 사용할 수있을 때까지 차단됩니다. 따라서 메모리가 거의없는 플랫폼 (임베디드 또는 전화 등)에 있지 않는 한 크기를 너무 작게 만드는 것에주의하십시오.

+0

감사합니다 !! 작은 VM을 사용하고 있습니다 (지금은 변경할 수 없음). 따라서 메모리가 제한됩니다. 나는 여전히이 경로를 사용하는 것을 선호하지만 더 작은 버퍼를 사용하여 더 자주 디스크에 씁니다. 지금 테스트 중입니다. –

+0

도 알려주세요.이 문제를 처리하는 가장 좋은 방법은 구성 또는 시스템 속성을 통해 무엇입니까? –

+1

비동기 로거 링 버퍼 크기는 시스템 속성을 통해서만 구성 할 수 있습니다. –