最近的项目需要捕获系统抛出的异常,并将异常信息保存,记录以下解析Exception的方法。


  • 异常详细信息

    这里说的“异常详细信息”指的是平时打印到控制台的那种信息,如下图

获取方法:

package com.pantech.boot.common.systemlog.util;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream; /**
* @author 肖政宇
* @date 2019-10-30 11:11
* 说明:异常解析
*/
public class ExceptionInformation { /**
* 异常解析
*/
public static String getExceptionInformation(Exception exception) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PrintStream printStream = new PrintStream(outputStream);
exception.printStackTrace(printStream); String exceptionInformation = new String(outputStream.toByteArray());
printStream.close();
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return exceptionInformation;
}
}

  • 异常具体信息

这里说的异常具体信息指的是,具体的某一项信息,比如异常从哪个类抛出、异常用哪个方法抛出、产生异常的代码在第几行

package com.pantech.boot.module.log.serviceimpl;

import com.pantech.boot.common.systemlog.SystemException;
import com.pantech.boot.common.systemlog.util.ExceptionInformation;
import com.pantech.boot.common.systemlog.util.IpAddress;
import com.pantech.boot.module.log.entity.SystemExceptionLogEntity;
import com.pantech.boot.module.log.entity.SystemOperationLogEntity;
import com.pantech.boot.module.log.repository.SystemExceptionLogRepository;
import com.pantech.boot.module.log.service.SystemExceptionLogService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List; /**
* @author 肖政宇
* @date 2019-10-29 17:06
* 说明:系统异常记录
*/
@Service
public class SystemExceptionLogServiceImpl implements SystemExceptionLogService {
private final Logger logger = LoggerFactory.getLogger(SystemExceptionLogServiceImpl.class); private SystemExceptionLogRepository repository;
private IpAddress ipAddress; @Autowired
public void setRepository(SystemExceptionLogRepository repository) {
this.repository = repository;
} @Autowired
public void setIpAddress(IpAddress ipAddress) {
this.ipAddress = ipAddress;
} /**
* 保存一条系统异常
*
* @param systemExceptionLog - 异常信息
*/
@Override
public SystemExceptionLogEntity save(SystemExceptionLogEntity systemExceptionLog) {
return repository.save(systemExceptionLog);
} /**
* 用于手动添加异常日志
*
* @param e - 异常类型
*/
@Override
public SystemExceptionLogEntity exceptionLog(Exception e) {
/**
* 1、解析异常信息
*/
//获取异常栈首个元素,用以解析异常部分信息
StackTraceElement stackTraceElement = e.getStackTrace()[0];
//异常类型
String exceptionType = e.toString();
//异常抛出于某个类
String className = stackTraceElement.getClassName();
//异常抛出于某个方法
String methodName = stackTraceElement.getMethodName();
//异常抛出于第几行
int lineNumber = stackTraceElement.getLineNumber();
//异常抛出地点详细信息
String throwPlace = className + "." + methodName + "[" + lineNumber + "]";
//异常详细信息
String content = ExceptionInformation.getExceptionInformation(e);
String[] con = content.split("\n");
if (con.length > 50) {
//保存前50行
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < 50; i++) {
stringBuilder.append(con[i]);
stringBuilder.append("\n");
}
content = stringBuilder.toString();
}
//ip地址
String ip = ipAddress.getIpAddress();
/**
* 2、保存异常信息到数据库
*/
SystemExceptionLogEntity systemExceptionLog = new SystemExceptionLogEntity();
systemExceptionLog.setExceptionType(exceptionType);
systemExceptionLog.setIpAddress(ip);
systemExceptionLog.setThrowPlace(throwPlace);
systemExceptionLog.setContent(content);
return this.save(systemExceptionLog);
}
}

Java 解析Exception信息的更多相关文章

  1. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...

  2. 使用htmlunit在线解析网页信息

    前言 最近工作上遇到一个问题,后端有一个定时任务,需要用JAVA每天判断法定节假日.周末放假,上班等情况, 其实想单独通过逻辑什么的去判断中国法定节假日的放假情况,基本不可能,因为国家每一年的假期可能 ...

  3. java读取照片信息 获取照片拍摄时的经纬度

    项目结构 源码:ImageInfo.zip 第一步:添加需要的架包metadate-extractor.jar 架包下载地址:https://code.google.com/p/metadata-ex ...

  4. JAVA解析XML的四种方式

    java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...

  5. java解析xml的几种方式

    java解析xml的几种方式 DOM DOM的全称是Document ObjectModel,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称D ...

  6. Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享

    Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享 在此,先分享下写此文前的经历与感受,我所有的感觉浓缩到一个字,那就是:"坑&qu ...

  7. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  8. Java解析XML:Jdom解析和SAX解析

    今天看了Java解析XML的几种方法,记录一下 1.Jdom解析 (1)读取XML内容 private static void readXML() { // TODO Auto-generated m ...

  9. XML基础+Java解析XML +几种解析方式的性能比较

    XML基础+Java解析XML 一:XML基础 XML是什么: 可扩展的标记语言 XML能干什么: 描述数据.存储数据.传输(交换)数据. XML与HTML区别: 目的不一样 XML 被设计用来描述数 ...

随机推荐

  1. 【BZOJ1227】[SDOI2009]虔诚的墓主人

    E. 虔诚的墓主人 题目描述 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地.当地的居民都是非常虔诚的基督徒,他们愿意提前 ...

  2. 动画删除cell出问题

    删除UITableView行的代理时出了问题 解决办法 先remove数据,再执行 [_mTableView deleteRowsAtIndexPaths:[NSArray arrayWithObje ...

  3. 微信支付、支付宝支付和QQ钱包支付

    最近忙于对接微信支付和支付宝支付,注册微信公众号,认证公众号,注册微信支付商户号并进行认证: 签约支付宝支付产品(手机网站支付.PC网站支付),注册支付宝企业账号(企业账号权限更大): 注册QQ钱包商 ...

  4. github下载慢,轻松提速教程

    获取github的IP地址访问:https://www.ipaddress.com/ 网址 依次获取以下三个网址的IP github.comgithub.global.ssl.fastly.netco ...

  5. WPF 之 DataTemplate 实例(摘抄)

     

  6. web与原生交互+活动

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 用一维数组实现栈(C++编程思想 p120)

    1 实现思路 向栈中插入4个元素后的状态 执行过程分析: 2 代码实现 clib.h 接口定义 typedef struct CStashTag { int ele_size; //栈中每个元素的占用 ...

  8. 困扰的问题终于解决了-docker时区不正确的问题修改记

    前一阵子有一台服务器,mysql的时间比北京时间晚了8个小时.我知道是时区的问题,但是不知道为什么弄成这样,宿主机没有问题,后来一看mysql的docker,时区是错的. mybatis-plus打印 ...

  9. Mysql怎样控制replace替换的次数?

    我想把“ABC是ABC”替换成“123是ABC”,也就是找出第一个ABC替换成123,MYSQL命令应该怎么写? UPDATE data SET body=REPLACE(body, 'ABC', ' ...

  10. tf.train.slice_input_producer()

    tf.train.slice_input_producer处理的是来源tensor的数据 转载自:https://blog.csdn.net/dcrmg/article/details/7977687 ...