`

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.email=org.apache.log4j.net.SMTPAppender log4j.appender.email.SMTPHost=smtp.example.com log4j.appender.email.Port=587 log4j.appender.email.Subject=Error Notification log4j.appender....

    log4j 发送邮件

    2. **Log4j配置**:要使用Log4j发送邮件,首先需要在项目的配置文件(通常是`log4j.properties`或`log4j.xml`)中添加适当的配置,包括设置SMTP服务器信息、发件人和收件人地址,以及触发发送邮件的日志级别。...

    javaweb配置Log4j发送日志邮件------全面

    配置Log4j发送日志邮件主要涉及以下几个步骤: 1. **配置log4j.properties文件**:这是Log4j的配置文件,我们需要在这里定义Appender。添加以下内容: ```properties # 定义一个SMTP Appender log4j.appender.SMTP...

    log4j 不同级别 不同文件 发送邮件配置

    在这个特定的配置场景中,我们将探讨如何设置log4j,使其能将不同级别的日志信息分别记录到不同的文件中,并且具备发送邮件通知的能力。 首先,我们需要创建一个log4j的配置文件,通常命名为`log4j.properties`。这...

    Spring项目中怎么配置log4j

    log4j.appender.A1=org.apache.log4j.net.SMTPAppender log4j.appender.A1.To=your-email@example.com log4j.appender.A1.From=no-reply@example.com log4j.appender.A1.SMTPHost=smtp.example.com log4j....

    log4j发送邮件log4j1.2.16.jar、mail.jar、activation.jar

    本文将深入探讨Log4j发送邮件的功能,以及涉及到的log4j-1.2.16.jar、mail.jar和activation.jar这三个关键文件。 Log4j是一个开源的日志框架,最初由Apache软件基金会开发。它为Java应用程序提供了灵活的日志记录...

    log4j应用的一个例子

    log4j.appender.Email=org.apache.log4j.net.SMTPAppender log4j.appender.Email.SMTPHost=smtp.example.com log4j.appender.Email.From=test@example.com log4j.appender.Email.To=user@example.com log4j.appender...

    log4j日志Demo

    log4j.appender.EMAIL=org.apache.log4j.net.SMTPAppender log4j.appender.EMAIL.BufferSize=1 log4j.appender.EMAIL.To=user@example.com log4j.appender.EMAIL.From=logger@example.com log4j.appender.EMAIL....

    TestLog4j2Mail

    为了实现这个功能,首先需要在Log4j的配置文件(通常是log4j.properties或log4j.xml)中设置一个Appender(日志输出器),这个Appender类型是SMTPAppender,用于发送邮件。SMTPAppender需要配置SMTP服务器的地址、...

Global site tag (gtag.js) - Google Analytics