服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

学习自定义smtpappender中的源码


  package piv.zheng.log4j.test;
  
  import org.apache.log4j.appenderskeleton;
  import org.apache.log4j.layout;
  import org.apache.log4j.helpers.loglog;
  import org.apache.log4j.spi.loggingevent;
  import org.apache.log4j.spi.errorcode;
  import java.util.properties;
  import java.util.date;
  
  import javax.mail.session;
  import javax.mail.transport;
  import javax.mail.message;
  import javax.mail.messagingexception;
  import javax.mail.internet.mimemessage;
  import javax.mail.multipart;
  import javax.mail.internet.mimemultipart;
  import javax.mail.internet.mimebodypart;
  import javax.mail.internet.internetaddress;
  import javax.mail.internet.addressexception;
  
  public class smtpappender extends appenderskeleton {
  private string to; //收件人
  private string from; // 发件人
  private string subject; //邮件标题
  private string smtphost; //邮件服务器
  private string auth; //身份验证标识
  private string username; //用户
  private string password; //密码
  private boolean locationinfo = false;
  
  protected session ses;
  protected message msg;
  protected properties props;
  
  public smtpappender() {}
  
  public smtpappender(layout layout) {
  
  this.layout = layout;
  
  }
  
  //应用设置
  public void activateoptions() {
  props = new properties(system.getproperties());
  if (smtphost != null) {
  props.put("mail.smtp.host", smtphost);
  }
  if (auth != null) {
  props.put("mail.smtp.auth", auth);
  }
  if (username != null) {
  props.put("username", username);
  }
  if (password != null) {
  props.put("password", password);
  }
  ses = session.getinstance(props); //创建session
  
  msg = new mimemessage(ses); //创建message
  
  try {
  //为message设置发件人
  if (from != null) {
  msg.setfrom(getaddress(from));
  } else {
  msg.setfrom();
  }
  
  //为message设置收件人
  if (to != null) {
  msg.setrecipients(message.recipienttype.to, parseaddress(to));
  }
  
  //为message设置标题
  if (subject != null) {
  msg.setsubject(subject);
  }
  } catch (messagingexception e) {
  loglog.error("could not activate smtpappender options.", e);
  }
  }
  
  //重写执行方法,当执行日志输出时会被调用
  public void append(loggingevent event) {
  //检查message及layout
  if (!checkentryconditions()) {
  return;
  }
  
  event.getthreadname();
  event.getndc();
  if (locationinfo) {
  event.getlocationinformation();
  }
  
  //发送邮件
  sendbuffer(event);
  }
  
  protected boolean checkentryconditions() {
  if (this.msg == null) {
  errorhandler.error("message object not configured.");
  return false;
  }
  
  if (this.layout == null) {
  errorhandler.error("no layout set for appender named [" + name + "].");
  return false;
  }
  return true;
  }
  
  synchronized public void close() {
  this.closed = true;
  }
  
  internetaddress getaddress(string addressstr) {
  try {
  return new internetaddress(addressstr);
  } catch (addressexception e) {
  errorhandler.error("could not parse address [" + addressstr + "].", e, errorcode.address_parse_failure);
  return null;
  }
  }
  
  internetaddress[] parseaddress(string addressstr) {
  try {
  return internetaddress.parse(addressstr, true);
  } catch (addressexception e) {
  errorhandler.error("could not parse address [" + addressstr + "].", e, errorcode.address_parse_failure);
  return null;
  }
  }
  
  public boolean requireslayout() {
  return true;
  }
  
  //发送邮件
  protected void sendbuffer(loggingevent event) {
  try {
  //将日志信息设置到message中
  mimebodypart part = new mimebodypart();
  
  stringbuffer sbuf = new stringbuffer();
  string t = layout.getheader();
  if (t != null) {
  sbuf.append(t);
  }
  sbuf.append(layout.format(event));
  if (layout.ignoresthrowable()) {
  string[] s = event.getthrowablestrrep();
  if (s != null) {
  for (int j = 0; j < s.length; j++) {
  sbuf.append(s[j]);
  }
  }
  }
  t = layout.getfooter();
  if (t != null) {
  sbuf.append(t);
  }
  part.setcontent(sbuf.tostring(), layout.getcontenttype());
  
  multipart mp = new mimemultipart();
  mp.addbodypart(part);
  
  msg.setcontent(mp); //为message设置内容,即日志信息
  msg.setsentdate(new date()); //为message设置发送时间
  
  //发送邮件
  transport tr = ses.gettransport("smtp");
  tr.connect(smtphost, username, password);
  tr.sendmessage(msg, msg.getrecipients(message.recipienttype.to));
  tr.close();
  } catch (exception e) {
  loglog.error("error occured while sending e-mail notification.", e);
  }
  }
  
  public void setto(string to) {
  this.to = to;
  }
  
  public string getto() {
  return to;
  }
  
  public void setfrom(string from) {
  this.from = from;
  }
  
  public string getfrom() {
  return from;
  }
  
  public string getsubject() {
  return subject;
  }
  
  public void setsubject(string subject) {
  this.subject = subject;
  }
  
  public void setsmtphost(string smtphost) {
  this.smtphost = smtphost;
  }
  
  public string getsmtphost() {
  return smtphost;
  }
  
  public void setauth(string auth) {
  this.auth = auth;
  }
  
  public string getauth() {
  return auth;
  }
  
  public void setusername(string username) {
  this.username = username;
  }
  
  public string getusername() {
  return username;
  }
  
  public void setpassword(string password) {
  this.password = password;
  }
  
  public string getpassword() {
  return password;
  }
  
  public void setlocationinfo(boolean locationinfo) {
  this.locationinfo = locationinfo;
  }
  
  public boolean getlocationinfo() {
  return locationinfo;
  }
  }

扫描关注微信公众号