| |
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; } }
|
|