发送错误日志到邮箱的两种方式

本文介绍两种将应用程序中出现的异常通过邮件发送的方式:一是利用log4j配置实现错误日志邮件通知;二是自定义异常邮件发送工具。前者适用于基于log4j的日志管理系统,后者提供更灵活的邮件发送选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近写项目考虑把一些运行时候出现的异常发送邮箱,这样可以随时监控错误,网上看可以用log4J发送错误日志到邮箱,现在把这种方式记录下来,以备下次用

1.log4j方式

需要jar包

<dependency>
  <groupId>javax.mail</groupId>
  <artifactId>mail</artifactId>
  <version>1.4.7</version>
</dependency>
<!--log4J-->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>${slf4j.version}</version>
</dependency>
log4j.properties配置 这里需要配置上MAIL

log4j.rootLogger =MAIL 
#发送错误邮件
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender  
log4j.appender.MAIL.Threshold=ERROR 
log4j.appender.MAIL.BufferSize=10
        
log4j.appender.MAIL.From=*****@126.com
log4j.appender.MAIL.SMTPHost=smtp.126.com
log4j.appender.MAIL.SMTPUsername=*****
log4j.appender.MAIL.SMTPPassword=*******
log4j.appender.MAIL.SMTPDebug=true  
log4j.appender.MAIL.Subject=Log4JErrorMessage
log4j.appender.MAIL.To=*****@163.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework]%d - %c -%-4r[%t]%-5p %c %x -%m%n</span></strong> 
我用126邮箱发送给163邮箱,打码的依次是发送邮箱名,邮箱名,密码,接收邮箱名, SMTPUHost根据每个邮箱不同,需要自己修改,发送邮件的日志级别是ERROR型。

自己测试,每次会发送三次邮件,一次是自己做aop异常捕获的,还有两次是druid打印的错误日志,有点繁琐。决定用第二种方式。

2.自定义邮件发送util

这个还是需要上面的mail包,下面是我自定义的异常邮件发送工具


import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.util.Properties;

/**
 * Description
 *
 * @author wangsong
 * @date 19:39 2018/1/30
 */
public class ErrorLogMail {
    private static final String HOST = "smtp.126.com";
    private static final Integer PORT = 25;
    private static final String USERNAME = "***@126.com";
    private static final String PASSWORD = "****";
    private static final String EMAILFORM = "***@126.com";
    private static JavaMailSenderImpl mailSender = createMailSender();
    /**
     * 邮件发送器
     *
     * @return 配置好的工具
     */
    private static JavaMailSenderImpl createMailSender() {
        JavaMailSenderImpl sender = new JavaMailSenderImpl();
        sender.setHost(HOST);
        sender.setPort(PORT);
        sender.setUsername(USERNAME);
        sender.setPassword(PASSWORD);
        sender.setDefaultEncoding("Utf-8");
        Properties p = new Properties();
        p.setProperty("mail.smtp.timeout", "25000");
        p.setProperty("mail.smtp.auth", "false");
        sender.setJavaMailProperties(p);
        return sender;
    }
    /**
     * 发送邮件
     * @param html 发送内容
     * @throws MessagingException 异常
     * @throws UnsupportedEncodingException 异常
     */
    public static void sendHtmlMail( String html)  {
        try {
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            // 设置utf-8或GBK编码,否则邮件会有乱码
            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
            messageHelper.setFrom(EMAILFORM, "wangsong");
            messageHelper.setTo("******@163.com");
            messageHelper.setSubject("ErrorLog");
            messageHelper.setText(html, true);
            mailSender.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (MailException e) {
            e.printStackTrace();
        }
    }


logger.error(pjp.getSignature() + " error ", e);
//不可知异常,发送邮件ErrorLogMail.sendHtmlMail("时间:"+new Date()+"方法:"+pjp.getSignature()+"原因:"+e.toString());

方法加在aop捕获异常处,完成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值