Log4j에서 Async 방식을 이용하려면 Properties 파일이 아닌 XML 형식으로 작성하여야 한다.
XML 방식을 이용하여 원하는 Append를 Async 방식으로 사용할 수 있게 해준다.
<appender name="asyncAppender" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="500"/>
<param name="Blocking" value="true"/>
<appender-ref ref="something"/>
</appender>
XML 내부 설정 사항을 살펴보면 버퍼 사이즈 지정과 Block을 설정할 수 있다.
코드에서 Log를 사용하게 되면 Log내용을 메모리에 보관하였다가, Async 스레드가 메모리의 내용을
Appender에 전달하게 된다. (AsyncThread는 Log4j에서 자동으로 생성되어 동작함)
logger.info("INFO") logger.debug("DEBUG") ...
|
▷ |
Memory |
AsyncThread ▷
|
Append(File, Rolling etc..)
|
이와 같은 방식으로 사용되면, 순간적으로 많은 로그 요청으로 인하여 지정한 메모리 용량보다 많은 내용을
담게 될 수도 있다.
(예시: 웹 서비스에서 로그인 시간을 로그로 남긴다고 가정 하였을때, 버퍼 사이즈보다 많은 동시 접속자가
로그인을 시도하게 된다면, 로그의 버퍼사이즈보다 많은 내용을 순간적으로 가지게 된다.)
이 때, Blocking 설정이 True라면 메모리의 데이터가 해소 될때까지 메모리 용량에 유입을 막게 되고
Blocking 설정이 False라면 메모리가 확보 될떄까지 로그 내용은 버려지게 된다.
Blocking을 설정하지 않을 경우, 기본적으로 TRUE로 설정된다.