log4j自动发送错误日志邮件

1.功能:实现程序出现异常的情况下能自动捕捉异常并记录日记发送邮件通知功能,方便开发人员能够及时获知自己的程序运行状态。

2.补充:发送邮件的一个重要的类是SMTPAppender,版本低于log4j-1.2.14.jar不支持SMTP认证(SMTPAppender中没有SMTPPassword 和SMTPUsername 属性,这两个属性分别是登录SMTP服务器发送认证的用户名和密码)。

3.使用Log4j发送日志邮件需要如下Jar包:

log4j-1.2.15.jar(版本低于log4j-1.2.14.jar不支持SMTP认证)

javax.mail.jar

activation.jar


4.程序清单:


1)亲测有效的配置文件:log4j.properties  (放置位置在包外src内。)

## ROOT
log4j.rootLogger=INFO,CONSOLE,A_default,MAIL

## CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=INFO
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
#log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.CONSOLE.layout.ConversionPattern=[\u8C03\u8BD5\u4FE1\u606F]%-5p %c %x - %m%n

## A_default
log4j.appender.A_default=org.apache.log4j.RollingFileAppender
log4j.appender.A_default.Threshold=INFO
log4j.appender.A_default.File=d:/NewWorkSpace/log4j/RFID.log
log4j.appender.A_default.MaxFileSize=4000KB
log4j.appender.A_default.MaxBackupIndex=10
log4j.appender.A_default.layout=org.apache.log4j.PatternLayout
log4j.appender.A_default.layout.ConversionPattern=[\u8C03\u8BD5\u4FE1\u606F]%-5p %c %x - %m%n

## MAIL
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
# \u65E5\u5FD7\u7684\u9519\u8BEF\u7EA7\u522B
log4j.appender.MAIL.Threshold=ERROR
# \u7F13\u5B58\u6587\u4EF6\u5927\u5C0F\uFF0C\u65E5\u5FD7\u8FBE\u5230512K\u65F6\u53D1\u9001Email
log4j.appender.MAIL.BufferSize=512
# \u53D1\u9001\u90AE\u4EF6\u7684\u670D\u52A1\u5668
log4j.appender.MAIL.SMTPHost=smtp.163.com
# \u90AE\u4EF6\u7684\u6807\u9898
log4j.appender.MAIL.Subject=\u6D77\u6D0B\u9879\u76EE\u6570\u636E\u9519\u8BEF\u63D0\u793A
# \u7528\u6237\u540D
log4j.appender.MAIL.SMTPUsername=************@163.com
# \u5BC6\u7801
log4j.appender.MAIL.SMTPPassword=******
# \u53D1\u4EF6\u4EBA\u5730\u5740
log4j.appender.MAIL.From=************@163.com
# \u65E5\u5FD7\u90AE\u4EF6\u7684\u63A5\u6536\u8005
log4j.appender.MAIL.To=*********@qq.com
# \u65E5\u5FD7PatternLayout
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
# \u65E5\u5FD7\u7684\u683C\u5F0F
log4j.appender.MAIL.layout.ConversionPattern=[ErrorMessage] %d - %c -%-4r [%t] %-5p %c %x - %m%n

注:1.首先先开通163邮箱的smtp协议,网上有专门教程。我这里是163邮箱发送给qq邮箱。

        2.其中的log4j.appender.MAIL.Subject 一定要用中文表示,不然会报错 :com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 163 smtp14,EsCowABH9I2dTAFa8w_pCg--.45578S2 1510034589,please see http://mail.163.com/help/help_spam_16.htm?ip=219.216.77.48&hostid=smtp14&time=1510034589。

2)测试邮件发送功能:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import org.apache.log4j.Logger;

public class Lo4jEmail {
	static Date date = new Date();
	static DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	static String time = format.format(date);
	public static void main(String[] args) {
		TimerTask task1 = new TimerTask() {
			@Override
			public void run() {
		Logger loggers1 = Logger.getLogger(Lo4jEmail.class);
		try{
			int number=10/0;
		 System.out.println(number);

	} catch (Exception e) {
		e.printStackTrace();
		loggers1.error(time+" "+e);
		System.out.println("=======邮件已发送成功=========");
		System.out.println("=======正在尝试进行连接========");
		//System.exit(0);					
	}finally {
		
		System.out.println("===========邮件发送测试进行中=========");
		

	}

	}
		};
		Timer timer1 = new Timer();
		long delay1 = 0;
		long intevalPeriod1 = 5 * 60 * 1000;
		timer1.scheduleAtFixedRate(task1, delay1, intevalPeriod1);
}		
}

注:我这里写了个定时更新功能,测试邮件发送功能是否一致稳定。大家在使用的时候可以根据需要合理使用定时更新功能。

3)异常发送邮件成功:






你可能感兴趣的:(java,smtp,554-DT-SPM)