Log4j 发送email 的 SMTPAppender 的配置

    项目上线后,运行时往往也还会有异常发生,在异常抛出时,后台的相关人员希望即时的得到反馈。所以需要配置LOG4J的发送EMAIL功能。

      项目中原来使用的的Log4j版本为1.2.9,但此版本并不支持邮件服务的认证功能 ,
如果需要认证,可能需要自己重写一下SMTPAppender,添加一下认证的功能. 例如:
package org.apache.log4j.net;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import java.util.Properties;

import org.apache.log4j.helpers.LogLog;

public class AuthSMTPAppender extends SMTPAppender {

/**
* SimpleAuthenticator is used to do simple authentication when the SMTP
* server requires it. It pulls the username and password from
* log4j.properties or where appropriate.
*/
private class SMTPAuthenticator extends javax.mail.Authenticator {

public PasswordAuthentication getPasswordAuthentication() {

String username = _user;
String password = _password;
return new PasswordAuthentication(username, password);
}
}

private String _user;

private String _password;

public String getUser() {
return _user;
}

public void setUser(String user) {
_user = user;
}

public String getPassword() {
return _password;
}

public void setPassword(String password) {
_password = password;
}

/**
* Overrode activeOptions() to have authentication
*/
public void activateOptions() {
Properties props = new Properties(System.getProperties());
if (getSMTPHost() != null) {
props.put("mail.smtp.host", getSMTPHost());
}

// New authentication bit
props.put("mail.smtp.auth", "true");
Authenticator auth = new SMTPAuthenticator();
Session session = Session.getInstance(props, auth);
// Session session = Session.getInstance(props, null);

// session.setDebug(true);
msg = new MimeMessage(session);

try {
if (getFrom() != null) {
msg.setFrom(getAddress(getFrom()));
} else {
msg.setFrom();
}

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


方法二下载了最新的版本1.2.15 ,此版本支持认证功能 ,下面是 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=${webframe.root}/WEB-INF/logs/railstone.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=[调试信息]%-5p %c %x - %m%n

## MAIL
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
# 日志的错误级别
log4j.appender.MAIL.Threshold=ERROR
# 缓存文件大小,日志达到512K时发送Email
log4j.appender.MAIL.BufferSize=512
# 发送邮件的服务器log4j.appender.MAIL.SMTPHost=smtp.163.com
# 邮件的标题
log4j.appender.MAIL.Subject=Log4J ErrorMessage
# 用户名
log4j.appender.MAIL.SMTPUsername=邮箱用户名
# 密码
log4j.appender.MAIL.SMTPPassword=邮箱密码
# 发件人地址
[email protected]
# 日志邮件的接收者
[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

     另外的一个问题是,LOG4J发送的邮件存在中文乱码的问题,所以将 原来的 [错误信息] %d - %c -%-4r [%t] %-5p %c %x - %m%n 修改为现在的 [ErrorMessage] %d - %c -%-4r [%t] %-5p %c %x - %m%n 。



PS:http://www.blogjava.net/wml/archive/2006/09/21/71035.html(原贴地址)

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