最近的项目需要捕获系统抛出的异常,并将异常信息保存,记录以下解析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. uniapp APP端使用指纹

    使用插件指纹模板: https://ext.dcloud.net.cn/plugin?id=358 Fingerprint模块管理指纹识别 要使用指纹识别功能需要具备条件: 确认当前设备环境是否支持指 ...

  2. behavior planning——inputs to transition functions

    the answer is that we have to pass all  of the data into transition function except for the previous ...

  3. H3C 分组交换连接模型

  4. 【微信小程序】下载并预览文档——pdf、word、excel等多种类型

    .wxml文件 <view data-url="https://XXX/upload/zang." data-type="excel" catchtap= ...

  5. xml path 列转行实例

    SQL Server2005提供了一个新查询语法——For XML PATH(''),这个语法有什么用呢?想象一下这样一个查询需求:有两个表,班级表A.学生表B,要查询一个班级里有哪些学生?针对这个需 ...

  6. java项目和npm项目命令窗口部署方便调试

    1.maven窗口选择root项目 在点击lifstyle--> package 点击播放箭头 build完毕以后会出现在TARGET目录下todo.jar 在执行 java -jar todo ...

  7. Python--day32--复习:https和http的区别;黏包;黏包问题的解决方式;

    1,https和http的区别: https比较安全,传输的时候先对内容进行加密,收到后再进行解密:它的传输内容不容易拦截,就算拦截下来了,也是加密的,看不懂.但是要买证书,一年要好几万,小公司承担不 ...

  8. UPC 2019年第二阶段我要变强个人训练赛第六场

    传送门 A.上学路线 题目描述 小D从家到学校的道路结构是这样的:由n条东西走向和m条南北走向的道路构成了一个n*m的网格,每条道路都是单向通行的(只能从北向南,从西向东走). 已知小D的家在网格的左 ...

  9. 2018-9-20-断点调试-Windows-源代码

    title author date CreateTime categories 断点调试 Windows 源代码 lindexi 2018-09-20 17:37:55 +0800 2018-05-1 ...

  10. H3C配置热键--hotkey---系统视图

    Hotkey作用 hotkey 命令用来为某一快捷键指定相应的命令行. undo hotkey 命令用来恢复系统的默认值. —————————————————————————————————————— ...