log4j 发email 补充

其实,那个牛人的方法有些麻烦,虽然SMTPAppender的smtpusername等属性是private的,但是有getsmtpusername()方法可以获得他们,所以只要改变

activateOptions()方法就可以,其他的只要继承SMTPAppender.class就可以了

具体代码如下

package com.hua.test;

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.net.SMTPAppender;

/**
 * SMTP Appender扩展,增加对邮件认证的支持
 * 
 * @author hua
 * 
 */
public class SMTPHua2Appender extends SMTPAppender {
	private String smtpAuth;



	public String getSmtpAuth() {
		return smtpAuth;
	}



	public void setSmtpAuth(String smtpAuth) {
		this.smtpAuth = smtpAuth;
	}



	@Override
	public void activateOptions() {
		// TODO Auto-generated method stub
		Properties props = new Properties(System.getProperties());
		Authenticator authenticator = null;
		
		if (getSMTPHost() != null)
			props.put("mail.smtp.host", getSMTPHost());

		/**//* ADD auth code */
		if (smtpAuth != null && smtpAuth.trim().equals("true")) {
			props.put("mail.smtp.auth", "true");
			authenticator = new Authenticator() {
				protected PasswordAuthentication getPasswordAuthentication() {
					return new PasswordAuthentication(getSMTPUsername(),
							getSMTPPassword());
				}
			};
		}

		Session session = Session.getInstance(props, authenticator);

		msg = new MimeMessage(session);
		try {
			InternetAddress fromAdd=new InternetAddress(getFrom());
			InternetAddress[] toAdd=InternetAddress.parse(getTo());
			if (getFrom() != null)
				msg.setFrom(fromAdd);
			else
				msg.setFrom();

			msg.setRecipients(Message.RecipientType.TO, toAdd);
			if (getSubject() != null)
				msg.setSubject(getSubject());
		} catch (MessagingException e) {
			LogLog.error("Could not activate SMTPAppender options.", e);
		}
	}

}

 

对应的log4j.properties

 

##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=[调试信息]%-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=E://Log//log.txt 
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=[调试信息]%-5p %c %x - %m%n 

## MAIL 
##log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender 
log4j.appender.MAIL=com.hua.test.SMTPHua2Appender  
# 日志的错误级别 
log4j.appender.MAIL.Threshold=INFO 
# 缓存文件大小,日志达到512K时发送Email 
log4j.appender.MAIL.BufferSize=1 
# 发送邮件的服务器
log4j.appender.MAIL.SMTPHost=smtp.sina.com
# 邮件的标题 
log4j.appender.MAIL.Subject=Log4J ErrorMessage 
# 用户名 
log4j.appender.MAIL.SMTPUsername=doloveme70910054
# 密码 
log4j.appender.MAIL.SMTPPassword=xxxxx
# 发件人地址 
[email protected]
log4j.appender.MAIL.smtpAuth=true
# 日志邮件的接收者 
[email protected]
# 日志PatternLayout 
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout 
# 日志的格式log4j.appender.MAIL.layout.ConversionPattern=[ErrorMessage] %d - %c -%-4r [%t] %-5p %c %x - %m%n

 

 

这样就好了,可以很轻松的DIY  log4j

你可能感兴趣的:(apache,C++,c,log4j,C#)