读书人

log4j邮件发送异常日志

发布时间: 2012-10-06 17:34:01 作者: rapoo

log4j邮件发送错误日志

能够起到的作用:

????? 项目错误信息能及时(实时)反映给项目维护人员以及相关负责人

优点:1,快速响应

????? 2,共同监督

????? 3,邮件正文直接显示了错误信息,拷贝信息比登陆服务器再查找要方便

????? 4,在日志信息继续写入文件的前提下,多了另外一种获取信息的渠道。

补充:log4j可以实现输出到控制台,文件,回滚文件,发送日志邮件,数据库,自定义标签。

输出:该方法可以在日志输出级别为 ERROR

???????? (即代码中调用logger.error("message")方法)时发送邮件

解决:第一步,修改 log4j.properties文件(以SFCS_WEB项目为例)

????? 第二步,利用javamail发送邮件,需要导入包mail.jar和activation.jar?

??????????? SFCS_WEB项目因为已经存在上述包,因此直接修改配置文件后就可以使用。

????? 该项目开发人员自行配置如下:(下文中我适当添加了一些注释,便于理解)

????? ## ROOT 可以设置日志输出的方式,日志可以依据以下设置同时输出到多种目的地

????? log4j.rootCategory=INFO,file

????? ## R ?将日志写入文件???????

?????? log4j.appender.file=org.apache.log4j.DailyRollingFileAppender

???????log4j.appender.file.DatePattern='.'yyyy-MM-dd

???????log4j.appender.file.File=run.log

???????log4j.appender.file.Append=true

???????log4j.appender.file.Threshold=INFO

???????log4j.appender.file.layout=org.apache.log4j.PatternLayout

???????log4j.appender.file.layout.ConversionPattern=%c %x - %m%n

???????开始修改,修改分为两部分,

???????第一部分修改log4j.rootCategory=INFO,file------->log4j.rootCategory=INFO,file,MAIL

???????之后在该文件尾部追加以下内容:

???????## MAIL

???????log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender

???????#?日志的错误级别

???????log4j.appender.MAIL.Threshold=ERROR

???????#?缓存文件大小,日志达到1K时发送Email ??可以自定义缓存文件的大小

???????log4j.appender.MAIL.BufferSize=1

???????#?发送邮件的服务器

???????log4j.appender.MAIL.SMTPHost=X.X.X.X(实际SMTP服务器IP或主机名)

???????#?邮件的标题

???????log4j.appender.MAIL.Subject=Log4J ErrorMessage

???????#?发件人地址

???????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

???????以上内容为必须的。

???????如果SMTP服务器需要验证的话,可以添加SMTP服务器用户名和密码,但是以下两项不是所有的LOG4J版本都支持。

???????需要自己提前确认清楚的。

???????#?SMTP用户名

?????? log4j.appender.MAIL.SMTPUsername=
????? #?SMTP密码

?????? log4j.appender.MAIL.SMTPPassword=

????? 至此,log4j配置文件修改完毕。

????? 以上配置和修改全部经过验证,并且成功发送出ERROR的邮件。???????

存在问题:中文乱码问题

????? 该信息的产生很多时候是因为logger.error("message")中包含中文字符所致。

????? 如果不想去解决这个问题,以下有网络资料供参考

???? 原因:配置文件里的layout属性对应的布局模式

???? log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout

???? 为处理中文乱码,可以写一个布局模式。

???? 如果你要使用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"; //修改编码方式而已!!!
?????????}
?????????}

1 楼 huang_yong 2010-06-21 还有一个方法不妨也可以参考一下:

下载Log4J的源码,直接修改org.apache.log4j.Layout类中的一行代码

将"text/plain"修改为"text/plain;charset=UTF-8"

当然“GBK”也可以,不过本人比较喜欢UTF-8

:) 2 楼 huang_yong 2010-06-21 补充:

最后再把编译后的Layout.class覆盖到log4j.jar中

完毕!

读书人网 >软件架构设计

热点推荐