Log4j使用总结EMAIL
log4j.appender.MAIL=log.mailInfo.SelfSMTPAppender
#log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
# LEVEL
log4j.appender.MAIL.Threshold=INFO
# Email
#log4j.appender.MAIL.BufferedIO=true
#设置缓存,当日志记录数为10条时,发送邮件。默认为1
log4j.appender.MAIL.BufferSize=10
# SMTP
log4j.appender.MAIL.SMTPHost=smtp.163.com
# 主题 用java native2ascii编译解决中文乱码
log4j.appender.MAIL.Subject=LOG4J\u65E5\u5FD7\u8BB0\u5F55\u4FE1\u606F\uFF01
# 邮箱登陆名称
log4j.appender.MAIL.SMTPUsername=**************
# 邮箱登陆密码
log4j.appender.MAIL.SMTPPassword=**************
# 邮箱名称
log4j.appender.MAIL.From=**********@163.com
# 目的邮箱,多个邮箱以逗号分隔
log4j.appender.MAIL.To=*******@hotmail.com
# PatternLayout
#log4j.appender.MAIL.layout=log.mailInfo.SelfHtmlLayOut
log4j.appender.MAIL.layout=log.mailInfo.SelfPatternLayOut
log4j.appender.MAIL.layout.ConversionPattern=[Message] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#不写入上层即父类logger
log4j.additivity.MAIL=false
解决邮箱标题乱码:用native2ascii把中文字符进行Unicode编码
解决邮件内容乱码:写一个子类继承PatternLayOut,重写器getContentType方法,返回字符串"text/plain;charset=UTF-8”
解决邮件缓存问题:如果程序停止时,日志记录小于10, 默认不会发送。写一个子类
public class SelfSMTPAppender extends SMTPAppender implements Runnable {public SelfSMTPAppender() {super(new SelfTriggeringEventEvaluator());Runtime.getRuntime().addShutdownHook(new Thread(this)); }@Overridepublic void append(LoggingEvent event) {if (!(checkEntryConditions())) {return;}event.getThreadName();event.getNDC();event.getMDCCopy();if (this.getLocationInfo()) {event.getLocationInformation();}this.cb.add(event);if (this.evaluator.isTriggeringEvent(event))if (cb.length() > this.getBufferSize()) {sendBuffer();}}/** * 当程序结束时,还在缓冲里面的事件是不会被发送出来的。因为事件数往往没有bufferSize的一半<br> * 加一个线程处理,当JVM退出时,将缓冲区数据发送出去。即程序结束前,执行一些清理工作<br> */@Overridepublic void run() {if (cb.length() > 0) {sendBuffer();}}} 1 楼 koubai 2011-11-15 very useful