<appender name="errorAppender" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/errors.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="10000KB" />
<param name="MaxBackupIndex" value="50" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%-16t]%m [%l : %t] %n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
</filter>
</appender>
<appender name="ASYNC_errorAppender" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="1000"/>
<param name="Blocking" value="true"/>
<param name="LocationInfo" value="false"/>
<appender-ref ref="errorAppender"/>
</appender>
<logger name="com.mycompany.product.core" additivity="false"<
<level value="DEBUG" /<
<appender-ref ref="ASYNC_coreappender" /<
<appender-ref ref="ASYNC_errorAppender" /<
<appender-ref ref="ASYNC_ConsoleAppender" /<
</logger<
"LocationInfo" parameter is set to FALSE because of line number calculation's performance impact.You can set it to TRUE when you needed it. Log4j will take necessary actions on the fly. (Nevertheless i don't undertsand why this calculation needed to to be done on my thread! )
"Blocking" parameter is set to TRUE. Normally I prefer to set it true but this is my error log so i don't want to miss a error log if it happens.
"BufferSize" param is set to 1000 means :
1) if you set blocking param to false : you can miss some logs when your buffer is full.
2)if you set blocking param to true : your threads can be suspended while trying to log something while buffer is full. I don't prefer this kind of usage in production mode if my log entries not so critical like callDetailRecords/errors.
I will not write about why/when you need to use async logger. I want to finalize this blog entry ASAP before the blogger.com is blocked county wide (Turkey : A Middle East Country)
Take Care..