log4j发送日志邮件

Log4j发送日志邮件的作用:
      项目错误信息能及时(实时)反映给项目维护人员以及相关负责人。

优点:
      1.快速响应;
      2.共同监督;
      3.邮件正文直接显示了错误信息,拷贝信息比登陆服务器再查找要方便;
      4.在日志信息继续写入文件的前提下,多了另外一种获取信息的渠道。

补充:Log4j可以实现输出到控制台,文件,回滚文件,发送日志邮件,数据库,自定义标签。
发送邮件的一个重要的类是SMTPAppender,之前用的是 log4j-1.2.8,在1.2.8的版本中,SMTPAppender没有SMTPPassword 和SMTPUsername 属性。这两个属性分别是登录SMTP服务器发送认证的用户名和密码。

依赖的jar包:
log4j-1.2.15.jar(版本低于log4j-1.2.14.jar不支持SMTP认证)
mail.jar
activation.jar


在log4j.properties文件中配置:
Xml代码   收藏代码
  1. ### send error through email.  
  2. #log4j的邮件发送appender,如果有必要你可以写自己的appender  
  3. log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender  
  4. #发送邮件的门槛,仅当等于或高于ERROR(比如FATAL)时,邮件才被发送  
  5. log4j.appender.MAIL.Threshold=ERROR  
  6. #缓存文件大小,日志达到10k时发送Email  
  7. log4j.appender.MAIL.BufferSize=10  
  8. #发送邮件的邮箱帐号  
  9. log4j.appender.MAIL.From=xxx@163.com  
  10. #SMTP邮件发送服务器地址  
  11. log4j.appender.MAIL.SMTPHost=smtp.163.com  
  12. #SMTP发送认证的帐号名  
  13. log4j.appender.MAIL.SMTPUsername=xxx@163.com  
  14. #SMTP发送认证帐号的密码  
  15. log4j.appender.MAIL.SMTPPassword=xxx  
  16. #是否打印调试信息,如果选true,则会输出和SMTP之间的握手等详细信息  
  17. log4j.appender.MAIL.SMTPDebug=false  
  18. #邮件主题  
  19. log4j.appender.MAIL.Subject=Log4JErrorMessage  
  20. #发送到什么邮箱,如果要发送给多个邮箱,则用逗号分隔;  
  21. #如果需要发副本给某人,则加入下列行  
  22. #log4j.appender.MAIL.Bcc=xxx@xxx.xxx  
  23. log4j.appender.MAIL.To=xxx@xxx.com  
  24. log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout  
  25. log4j.appender.MAIL.layout.ConversionPattern=[framework]%d - %c -%-4r[%t]%-5p %c %x -%m%n  


Log4j的SMTP的级别默认是ERROR级别
默认是ERROR级别,那就是说,只有程序出错了,才可以收到邮件。不过可以自定义的级别,继承TriggeringEventEvaluator类,覆盖里面的一个方法:
Java代码   收藏代码
  1. @Override     
  2. public  boolean isTriggeringEvent(LoggingEvent arg0) {      
  3.         return arg0.getLevel().isGreaterOrEqual(Level.INFO);      
  4.     }  

SMTPAppender 实现是,每当isTriggeringEvent()这个方法返回true的时候,它都会发送邮件。这样的话,一个程序执行下来,每个有能力触发的事件都会形成一封邮件。
事件的个数达到bufferSize的一半的时候就会发一封邮件:
继承了SMTPAppender类,重写了append方法
Java代码   收藏代码
  1. @Override     
  2.     public void append(LoggingEvent event) {        
  3.         if (!checkEntryConditions()) {      
  4.             return;      
  5.         }         
  6.         event.getThreadName();      
  7.         event.getNDC();      
  8.         event.getMDCCopy();      
  9.         if (this.getLocationInfo()) {      
  10.             event.getLocationInformation();      
  11.         }      
  12.         cb.add(event);      
  13.         if (evaluator.isTriggeringEvent(event)) {      
  14.             if (cb.length() > this.getBufferSize() / 2) {      
  15.                 sendBuffer();      
  16.             }        
  17.         }      
  18.     }    

另外一个问题也随之产生了,当程序结束时,还在缓冲里面的事件是不会被发送出来的。因为事件数往往没有bufferSize的一半。
Java代码   收藏代码
  1. public   *****SMTPAppender() {      
  2.         Runtime.getRuntime().addShutdownHook(new Thread() {        
  3.             @Override     
  4.             public void run() {      
  5.                 if (cb.length() > 0) {      
  6.                     sendBuffer();      
  7.                 }        
  8.             }        
  9.         });      
  10.     }    


log4j有网页格式的输出:
Xml代码   收藏代码
  1. log4j.appender.MAIL.layout=org.apache.log4j.HTMLLayout    

解决邮件中的中文乱码问题,继承HTMLLayout,覆盖getContentType方法
Java代码   收藏代码
  1. @Override     
  2.     public String getContentType() {      
  3.         return "text/html;charset=GBK";       
  4.     }  


此文为网络摘自,有任何问题大家都可以批评指正。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值