Log4j 发送 EMail 的配置

xiaoxiao2024-04-13  25

Log4j 发送 EMail 的配置

      项目上线后,运行时往往也还会有异常发生,在异常抛出时,希望即时的得到反馈。所以需要配置LOG4J的发送EMAIL功能。       项目中原来使用的的Log4j版本为1.2.9 ,但此版本并不支持邮件服务的认证功能 ,遂重新下载了最新的版本1.2.14 ,查看源代码 此版本支持认证功能 ,下面是 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.appender.MAIL.Threshold=ERROR 修改为 INFO 级别 ,也只有在日志输出级别为 ERROR (即代码中调用logger.error("message")方法)时才会发送邮件,不知道是什么原因,

 

Log4J发日志邮件给多个接收者及标题、正文乱码问题

 

利用javamail发送邮件,你需要导入包mail.jar和activation.jar这两个包 ,否则是没法发邮件的 ,下边配置文件里绿色行显示的就是发给两个接收者ac和ae。

       这里会出现中文乱码问题,主要有两方面的乱码,一是标题乱码;二是正文乱码。下边具体说明这两种乱码的解决方案。 一、 标题乱码 Log4J日志邮件的标题在配置文件log4j.properties里设定,如下 log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender log4j.appender.MAIL.Threshold=FATAL log4j.appender.MAIL.BufferSize=10 log4j.appender.MAIL.From=ab@163.com log4j.appender.MAIL.SMTPHost=smtp@163.com log4j.appender.MAIL.Subject= Log4J提醒您:系统发生了严重错误 log4j.appender.MAIL.To=ac @163.com,ae@163.com log4j.appender.MAIL.layout=com.sun.DefineLayOut log4j.appender.MAIL.layout.LocationInfo=true

       灰色的行就是标题,log4J配置文件默认的读取方式是ISO-88591,遇到中文会出现乱码,我们可以把这个配置文件log4j.properties用jdk的工具native2asii转换一下编码方式。 命令:native2asii log4j.properties log4jxx.properties 把这个log4jxx.properties改名为log4j.properties取代原来的log4j.properties就ok了。 灰色行重新编码后是: log4j.appender.MAIL.Subject=Log4J\u63d0\u9192\u60a8\uff1a\u7cfb\u7edf\u53d1\u751f\u4e86\u4e25\u91cd\u9519\u8bef 二、 正文乱码         正文乱码,解决也比较简单。阅读Log4J的源码类SMTPAppender,我们可以发现sendBuffer()方法中有这样一句: part.setContent(sbuf.toString(), layout.getContentType()); 我们继续追踪发现layout就是配置文件里的layout属性对应的布局模式。但是这些布局模式都是继承自Layout,而contentType是只 可通过getContentType方法取得,不能修改。所有的布局模式getContentType方法返回的都是”text/plain”; 为处理中文乱码,我们可以写一个布局模式。如果你要使用HTMLLayout,我们就写一个HTMLLayout的子类,覆盖HTMLLayout的 getContentType方法即可。假如我要用org.apache.log4j.HTMLLayout。我们就可以写一个DefineLayOut 类,代码如下: package com.sun; import org.apache.log4j.HTMLLayout; public class DefineLayOut extends HTMLLayout{ public String getContentType() { return "text/html;charset=GBK"; } } 对应的配置文件设置如黄色行所示。

相关资源:敏捷开发V1.0.pptx
转载请注明原文地址: https://www.6miu.com/read-5014947.html

最新回复(0)