SMTPAppender邮件日志导致系统变慢
1、SMTPAppender邮件日志导致系统变慢的原因:log4j默认采用同步机制,这样会导致SMTP服务或VMWare VMFS阻塞,从而系统速度变慢。?2、解决方案:更改为异步,包裹一层org.apache.log4j.AsyncAppender,具体配置如下:
?
<appender?name="MAIL"?class="org.apache.log4j.AsyncAppender"> ????<param?name="BufferSize"?value="512"?/>??<param?name="Blocking"?value="false"?/>??<appender-ref?ref="smtpAppender"/></appender><appender?name="smtpAppender"?class="org.apache.log4j.net.SMTPAppender">????????<param?name="threshold"?value="ERROR"/>????????<!--?缓存文件大小,日志达到对应大小时发送Email,单位KB?-->????????<param?name="BufferSize"?value="10"/>????????<param?name="From"?value="*@163.com"/>????????<param?name="SMTPHost"?value="mail.163.com"/>????????<param?name="Subject"?value="***"/>????????<param?name="To"?value="aa@163.com,bb@163.com"/>????????<param?name="SMTPUsername"?value="**@163.com"/>????????<param?name="SMTPPassword"?value="123456"/>????????<layout?class="org.apache.log4j.PatternLayout">????????????<param?name="ConversionPattern"?value="%d{ISO8601}?%c?--?%p?(%F:%L)?--?%m%n"/>????????</layout>????????<filter?class="org.apache.log4j.varia.LevelRangeFilter">????????????<param?name="LevelMin"?value="ERROR"/>????????????<param?name="LevelMax"?value="ERROR"/>????????</filter></appender>其中参数blocking,默认是true,是指如果缓存满了,线程是否会阻塞。所以这里设置为false,这样会导致内容丢失,所以建议用于内容不重要的日志。效果:性能会提升20%之多。?PS:FileAppender与ConsoleAppender由于继承自WriterAppender(是异步机制),可以直接通过设置immediateFlush为false来达到异步的效果,无需再包裹一层。