项目错误信息能及时(实时)反映给项目维护人员以及相关负责人。
优点:
1.快速响应;
2.共同监督;
3.邮件正文直接显示了错误信息,拷贝信息比登陆服务器再查找要方便;
4.在日志信息继续写入文件的前提下,多了另外一种获取信息的渠道。
补充:Log4j可以实现输出到控制台,文件,回滚文件,发送日志邮件,数据库,自定义标签。
发送邮件的一个重要的类是SMTPAppender,之前用的是 log4j-1.2.8,在1.2.8的版本中,SMTPAppender没有SMTPPassword 和SMTPUsername 属性。这两个属性分别是登录SMTP服务器发送认证的用户名和密码。
依赖的jar包:
log4j-1.2.15.jar(版本低于log4j-1.2.14.jar不支持SMTP认证)
mail.jar
activation.jar
在log4j.properties文件中配置:
### send error through email. #log4j的邮件发送appender,如果有必要你可以写自己的appender log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender #发送邮件的门槛,仅当等于或高于ERROR(比如FATAL)时,邮件才被发送 log4j.appender.MAIL.Threshold=ERROR #缓存文件大小,日志达到10k时发送Email log4j.appender.MAIL.BufferSize=10 #发送邮件的邮箱帐号 [email protected] #SMTP邮件发送服务器地址 log4j.appender.MAIL.SMTPHost=smtp.163.com #SMTP发送认证的帐号名 [email protected] #SMTP发送认证帐号的密码 log4j.appender.MAIL.SMTPPassword=xxx #是否打印调试信息,如果选true,则会输出和SMTP之间的握手等详细信息 log4j.appender.MAIL.SMTPDebug=false #邮件主题 log4j.appender.MAIL.Subject=Log4JErrorMessage #发送到什么邮箱,如果要发送给多个邮箱,则用逗号分隔; #如果需要发副本给某人,则加入下列行 #[email protected] [email protected] log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout log4j.appender.MAIL.layout.ConversionPattern=[framework]%d - %c -%-4r[%t]%-5p %c %x -%m%n
Log4j的SMTP的级别默认是ERROR级别
默认是ERROR级别,那就是说,只有程序出错了,才可以收到邮件。不过可以自定义的级别,继承TriggeringEventEvaluator类,覆盖里面的一个方法:
@Override public boolean isTriggeringEvent(LoggingEvent arg0) { return arg0.getLevel().isGreaterOrEqual(Level.INFO); }
SMTPAppender 实现是,每当isTriggeringEvent()这个方法返回true的时候,它都会发送邮件。这样的话,一个程序执行下来,每个有能力触发的事件都会形成一封邮件。
事件的个数达到bufferSize的一半的时候就会发一封邮件:
继承了SMTPAppender类,重写了append方法
@Override public void append(LoggingEvent event) { if (!checkEntryConditions()) { return; } event.getThreadName(); event.getNDC(); event.getMDCCopy(); if (this.getLocationInfo()) { event.getLocationInformation(); } cb.add(event); if (evaluator.isTriggeringEvent(event)) { if (cb.length() > this.getBufferSize() / 2) { sendBuffer(); } } }
另外一个问题也随之产生了,当程序结束时,还在缓冲里面的事件是不会被发送出来的。因为事件数往往没有bufferSize的一半。
public *****SMTPAppender() { Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { if (cb.length() > 0) { sendBuffer(); } } }); }
log4j有网页格式的输出:
log4j.appender.MAIL.layout=org.apache.log4j.HTMLLayout
解决邮件中的中文乱码问题,继承HTMLLayout,覆盖getContentType方法
@Override public String getContentType() { return "text/html;charset=GBK"; }
此文为网络摘自,有任何问题大家都可以批评指正。