打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Log4j 配置错误信息发送Mail

近来不是很忙,看了看log4j,然后看到log4j里面有appender到mail的功能,个人做了点了解和实验,写了个简单的demo做了点测试。

Log4j发送日志邮件的作用:
      项目错误信息能及时(实时)反映给项目维护人员以及相关负责人。

优点:
      1.快速响应;
      2.共同监督;
      3.邮件正文直接显示了错误信息,拷贝信息比登陆服务器再查找要方便;
      4.在日志信息继续写入文件的前提下,多了另外一种获取信息的渠道。

首先:在apache官网下载相关最新的jar包,并在项目中引用(activation.jar,mail.jar),此外还有log4j的jar包,此例用的是(log4j-1.2.16.jar)

在测试的过程中发现了已下几点问题并解决,和大家分享下:

1.首先我测试的时候是用的info的级别,所以在发送mail的过程中出错了,信息都不会打印出来,并且mail也收不到,我就很奇怪,然后我把log的级别调成error,控制台才打印出了mail 发送失败的log信息,经查阅发现:Log4j的SMTP的级别默认是ERROR级别
默认是ERROR级别,那就是说,只有程序出错了,才可以收到邮件。不过可以自定义的级别,继承TriggeringEventEvaluator类,具体实现见下方代码:

  1. public class IMTriggeringEventEvaluator implements TriggeringEventEvaluator {  
  2.   
  3.     @Override  
  4.     public boolean isTriggeringEvent(LoggingEvent arg0) {  
  5.   
  6.         return arg0.getLevel().isGreaterOrEqual(Level.DEBUG);  
  7.     }  
  8.   
  9. }  
自定义的Appender:
  1. import org.apache.log4j.net.SMTPAppender;  
  2. import org.apache.log4j.spi.LoggingEvent;  
  3.   
  4. public class IMSMTPAppender extends SMTPAppender {  
  5.     public IMSMTPAppender() {  
  6.         super(new IMTriggeringEventEvaluator());  
  7.         Runtime.getRuntime().addShutdownHook(new Thread() {  
  8.             public void run() {  
  9.                 if (cb.length() > 0) {  
  10.                     sendBuffer();  
  11.                 }  
  12.             }  
  13.         });  
  14.     }  

此时比>=debug的级别都可以实现.

2 log报错的信息看到了,报了如下的错误:

  1. javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 25;  

这个时候通过上网查找,才发现是我本地机器上装了MACFEE杀毒软件,该软件里面的一个端口保护规则将port 25给阻止了,禁止群发邮件蠕虫发送邮件。然后把杀软关了或者把该规则去掉就ok 了

3 去掉以后还是会报

  1. 530 5.7.0 Must issue a STARTTLS command first  
此时我用的是gamil的smtp服务器,我换成163的就不报错了,经查阅是有的邮件服务器会拒绝该方式连接到邮件服务器上

4虽然连接163邮件服务器成功,可是此时还是会报AuthenticationFailedException异常,经查阅,是邮件服务器要对from 邮件的用户名和密码做认证,认证过了才能发送,可是这个时候我并没有发现我的log4j的参数文件里面可以配置SMTPUsername的属性,经查阅发现我当前用的是log4j1.2.6,在1.2.6的版本中,SMTPAppender没有SMTPPassword 和SMTPUsername 属性,更谈不上验证了。这两个属性分别是登录SMTP服务器发送认证的用户名和密码。1.2.9之后的版本才有这两个属性。

log4j也提供了邮件认证的API,但是网上有网友也遇到这样的问题,解决方法A 自定义Appender 继承org.apache.log4j.net.SMTPAppender,在这个类里面封装认证的逻辑,B使用log4j1.2。14以上版本,1.2.14以上版本集成了认证的功能,所以我果断把我的1.2.6版本换成了1.2.16,果断ok了。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
邮件服务器运作原理简单讲解
邮件工作原理
详解DNS的常用记录(下):DNS系列之三
SMTP结构及原理
如何在Microsoft Outlook Express添加您的电子邮件帐户
邮件服务器入门问答
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服