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类,具体实现见下方代码:

public class IMTriggeringEventEvaluator implements TriggeringEventEvaluator {

	@Override
	public boolean isTriggeringEvent(LoggingEvent arg0) {

		return arg0.getLevel().isGreaterOrEqual(Level.DEBUG);
	}

}
自定义的Appender:
import org.apache.log4j.net.SMTPAppender;
import org.apache.log4j.spi.LoggingEvent;

public class IMSMTPAppender extends SMTPAppender {
	public IMSMTPAppender() {
		super(new IMTriggeringEventEvaluator());
		Runtime.getRuntime().addShutdownHook(new Thread() {
			public void run() {
				if (cb.length() > 0) {
					sendBuffer();
				}
			}
		});
	}

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

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

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

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

3 去掉以后还是会报

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了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值