AsyncAppender를 이용하여 JDBC Appender를 좀 강하게 만들 수 있다.
case by case로 DB에 저장하는 것은 부담이 되니.. 큐에 쌓았다가 한꺼번에 저장하는 방식(DB 배치)을 하는 것이 DB나 웹 서버에게 좋다..

현재 Exception 발생시 JDBC Appender를 사용하다, 대용량 트래픽일 때, jdbc driver에 lock이 걸려서...
웹 서버의 서비스에 영향을 미치는 사건이 전에 발생한 적이 있었다..

이를 AsyncAppender로 고쳤더니. 더이상 문제가 발생되지 않았다..



<appender name="MYSQL-OUT" class="org.apache.log4j.jdbcplus.JDBCAppender">
<param name="Threshold" value="ERROR"/>
<param name="dbclass" value="com.mysql.jdbc.Driver"/>
<param name="url" value="jdbc:mysql://log.admin.google.co.kr/javalog?useUnicode=true&amp;characterEncoding=latin1&amp;jdbcCompliantTruncation=false"/>
...
<param name="sqlhandler" value="com.google.MysqlHandler"/>
<param name="Buffer" value="1"/>
</appender>
 

<appender name="async" class="org.apache.log4j.AsyncAppender">
    <param name="locationInfo" value="true"/>
    <param name="bufferSize" value="1024"/>
    <appender-ref ref="MYSQL-OUT" />  
</appender>


<logger name="com" additivity="false">
<level value="DEBUG"/>
...
<appender-ref ref="async"/>






Posted by '김용환'
,