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로 설정된다.