帮我写一个基于Java的全局异常捕捉工具,主要功能有:发生异常是会给指定邮箱发送消息通知服务报错请及时处理 并详细注释每个参数
时间: 2024-11-09 11:23:07 浏览: 11
当然可以。下面是一个简单的Java全局异常处理器示例,它使用了`java.util.logging.Logger`来进行日志记录,并使用了第三方库`javamail`发送电子邮件。请注意,这个例子假设你已经设置了系统的邮件服务器配置。
```java
import javax.mail.*;
import java.io.IOException;
import java.util.Properties;
/**
* GlobalExceptionHandler 类用于捕获并处理应用程序中的所有未处理异常
*/
public class GlobalExceptionHandler {
// 邮件发送者信息
private static final String FROM_EMAIL = "your-email@example.com";
private static final String PASSWORD = "your-email-password"; // 邮箱密码
// 收件人邮箱地址
private static final String TO_EMAIL = "recipient-email@example.com";
// 日志器实例
private static final Logger logger = Logger.getLogger(GlobalExceptionHandler.class.getName());
/**
* handleException 方法接收一个异常作为参数,记录日志并将错误信息通过邮件通知管理员
*
* @param e 发生的异常
* @param subject 邮件主题
* @param errorMessage 错误的具体描述
*/
public static void handleException(Throwable e, String subject, String errorMessage) {
try {
// 设置邮件属性
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "your-smtp-server"); // 根据你的邮件服务器填写
props.put("mail.smtp.port", "587");
// 创建Session实例
Session session = Session.getInstance(props,
new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(FROM_EMAIL, PASSWORD);
}
});
// 构造邮件消息
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(FROM_EMAIL));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(TO_EMAIL));
message.setSubject(subject);
// 构建邮件内容
StringBuilder emailBody = new StringBuilder()
.append("Error occurred: ")
.append(errorMessage)
.append("\n\nStack Trace:\n")
.append(e.getMessage()).append("\n");
// 将异常信息添加到邮件正文
BodyPart messageBody = new MimeBodyPart();
messageBody.setText(emailBody.toString(), "plain", "UTF-8");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBody);
message.setContent(multipart);
// 发送邮件
Transport.send(message);
logger.severe("An error has been reported and notified via email.");
} catch (MessagingException ex) {
// 记录邮件发送失败的异常
logger.log(Level.SEVERE, "Failed to send email notification:", ex);
} finally {
// 清理资源
if (e != null) {
logger.throwing(GlobalExceptionHandler.class.getName(), "handleException", e);
}
}
}
// 使用示例
public static void main(String[] args) {
try {
throw new RuntimeException("This is a test exception.");
} catch (RuntimeException e) {
handleException(e, "System Error", "A runtime error occurred while executing the code.");
}
}
}
```
阅读全文