`

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=邮箱密码
# 发件人地址
log4j.appender.MAIL.From=test@163.com
# 日志邮件的接收者
log4j.appender.MAIL.To=test@163.com
# 日志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(原贴地址)
分享到:
评论
3 楼 tianhandigeng 2011-11-04  
这两种方法真的可以吗?第一种方法 getAddress和parseAddress都不知道在哪 第二种方法测试了也不成功
2 楼 poeao 2010-11-20  
嗯 没错

1 楼 Neoman 2010-11-15  
1.2.14开始支持邮件认证的

相关推荐

    Log4j日志包

    log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender log4j.appender.MAIL.BufferSize=10 log4j.appender.MAIL.From=wisdom_xw@163.com log4j.appender.MAIL.SMTPHost=smtp.163.com log4j.appender.MAIL.SMTP...

    log4j日志驱动包

    Log4j比较全面的配置 log4j.rootLogger=DEBUG,CONSOLE,A1,im log4j.addivity.org.apache=true # 应用于控制台 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=DEBUG log4j....

    apache-log4j-2.0

    o LOG4J2-131: Add SMTPAppender. Thanks to Scott Severtson. o Added hostName and contextName to property map. o Add MessageFormatMessage and FormattedMessage. o LOG4J2-134: Use %red, %white, %blue, ...

    log4net实例

    log4net实例,多种输出方式: AdoNetAppender 将日志记录到数据库中。可以采用SQL和存储过程两种方式。 ConsoleAppender 将日志输出到应用程序控制台。 EventLogAppender 将日志写到Windows Event Log。 ...

    log4j-smtp-example

    log4j-smtp-示例示例项目,演示如何使用的与 。用法通过创建免费帐户注册 。 登录到Mailtrap后,单击“我的收件箱”链接,然后在“ SMTP设置”选项卡上的“显示凭据”下查找您的用户名和密码。 编辑smtp.properties...

    log4net .net 4.0 dll

    log4net 的.net4.0 版本 目前官网上的只提供2.0,1.1 版本的,所以,自己编译了一个。 提供出来,方便大家,省得自己编译了。 去除了:aspNetTraceAppender,SmtpAppender

    Logback用户手册中文版

    目录 ..........................................................................................................................I ...4. Appender ..........................................

Global site tag (gtag.js) - Google Analytics