Java配置log4j实现发送错误日志到邮箱中

使用背景:

     作为系统管理员和运维人员,当系统运行中遇到异常,应第一时间掌握有关情况,并尽快修复。当我们不在工作岗位上时,异常产生而我们后知后觉,待到客户反映给我们,那是相当的糟糕。那应该怎么做呢?我的做法是借助log4j的发送邮件功能。

第一步,引入相关jar,我使用jar是以下两个:llog4j-1.2.17.jar,mail.jar

关于jar的引用,这里多说一句,其一:据前辈们反映,如果使用log4j-1.2.14及以下版本的jar,无法实现遇到异常发送邮件的功能,原因是log4j-1.2.14.jar没有SMTPPassword 和SMTPUsername 属性,这里提个醒,我没实际验证过,我从开始用log4j版本都比较高,所以没有遇到那种情况。其二:在前面提到的那两个jar基础上,还需要activation.jar,在实际测试过程中,发现不添加这个jar也能发送邮件,所以我就没添加。

第二步,配置log4j.properties,使用xml,就去配置你的log4j.xml,具体代码如下,这里以log4j.properties举例

### set log levels 这里要与下面配置的模块相对应###
log4j.rootLogger =debug,stdout,info,error,MAIL

### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold = INFO 
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =[%-5p] [%d{yyyy-MM-dd HH:mm:ss}] %c - %m%n

### 输出info信息到项目根目录下
log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.Threshold = INFO 
log4j.appender.info.append=true
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=[yourProject] [%-5p] [%d{yyyy-MM-dd HH:mm:ss}] %c - %m%n
log4j.appender.info.datePattern=yyyy-MM-dd'.log'
log4j.appender.info.File=${catalina.home}/logs/yourProject_log/info_log/info.log
						 
### 输出debug信息到项目根目录下
log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.Threshold = DEBUG 
log4j.appender.debug.append=true
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=[yourProject] %d{yyyy-MM-dd HH\:mm\:ss} %5p %c{1}\:%L \: %m%n
log4j.appender.debug.datePattern=yyyy-MM-dd'.log'
log4j.appender.debug.File=${catalina.home}/logs/yourProject_log/debug_log/debug.log


### 输出error信息到项目根目录下
log4j.logger.error=error
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=[yourProject] %d{yyyy-MM-dd HH\:mm\:ss} %5p %c{1}\:%L \: %m%n
log4j.appender.error.datePattern=yyyy-MM-dd'.log'
log4j.appender.error.Threshold = ERROR 
log4j.appender.error.append=true
log4j.appender.error.File=${catalina.home}/logs/yourProject_log/error_log/error.log

######################send error through email.######################
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
#日志的错误级别
log4j.appender.MAIL.Threshold=ERROR
#缓存文件大小,日志达到2时发送Email
log4j.appender.MAIL.BufferSize=2
#发送邮件的服务器
log4j.appender.MAIL.SMTPHost=yourEmail.host.com
#邮件主题
log4j.appender.MAIL.Subject=yourProjectErrorMessage
#发送邮件箱的用户
log4j.appender.MAIL.SMTPUsername=emailAccount
#发送邮件箱的密码
log4j.appender.MAIL.SMTPPassword=emailPwd
#发送邮件使用的端口号
#log4j.appender.MAIL.SMTPPort=465
#发送邮件箱
log4j.appender.MAIL.From=emailAccount
#接受邮件箱
log4j.appender.MAIL.To=toUserEmail
#发送邮件的格式
log4j.appender.MAIL.layout=org.apache.log4j.HTMLLayout
#发送邮件的时间间隔,单位:1800秒
#log4j 发送邮件为同步发送,所以错误日志发送过多会导致系统阻塞,可能会影响系统的正常访问,谨慎使用!
log4j.appender.MAIL.SendMailInterval=1800

注释已经说得很清楚了,不过这里有2点还需要特别注意:

其一:如果你配置EMAIL部分,但在最上面等级那里没有添加了MAIL,系统遇到异常时无法发送邮件,具体是这里

细心的朋友会发现,我把端口这里的代码注释掉了,至于为什么注释掉,是因为在测试过程中,原先想指定使用SSL安全端口465来发送邮件,可是后台异常信息已经打印完了,可响应那边一直在打转,迟迟没有结果,关于这里我想不通,后面注释掉,前端发送请求,后台打印异常信息,已收到了邮件。后来将该配置升级到阿里云服务器,发现要启用465端口才可以收到邮件,也是怪了。

第三步,在需要捕捉异常的类中添加以下代码:

//UploadDataController为引入log4j的类名
private static Logger logger = Logger.getLogger(UploadDataController.class); 

在具体的代码块中添加:

}catch (Exception e){
  logger.error(e.getMessage(),e);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值