log4j邮件发送错误日志web服务管理



log4j邮件发送错误日志web服务管理。

能够起到的作用:
项目错误信息能及时(实时)反映给项目维护人员以及相关负责人
优点: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”; //修改编码方式而已!!!
}
}