最近的项目需要捕获系统抛出的异常,并将异常信息保存,记录以下解析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. LRJ-Example-06-13-Uva1103

    pic[][]数组存储每个点的值,0或1,输入时在原图的周围加了一圈0. color[][]数组存储每个点的color值,从1开始,dfs(row, col, c) 负责对每个点着色,连通在一起的连通 ...

  2. laravel5 怎么获取数组形式的数据

    当构建 JSON API 时,您可能常常需要把模型和关联对象转换成数组或JSON.所以Eloquent里已经包含了这些方法.要把模型和已载入的关联对象转成数组,可以使用 toArray方法: $use ...

  3. apply、call、bind方法调用

    ---恢复内容开始--- 首先这三个方法的作用都是用来改变this的值,而this的值一般有几种情况. 1.函数作为一个对象的一个方法来调用,此时this的值指向对象. var a={ v:0; f: ...

  4. [转]Netty实现原理浅析

    Netty是JBoss出品的高效的Java NIO开发框架,关于其使用,可参考我的另一篇文章netty使用初步.本文将主要分析Netty实现方面的东西,由于精力有限,本人并没有对其源码做了极细致的研 ...

  5. H3C 帧中继与水平分割(续)

  6. Python--day63--添加书籍和修改表结构的注意事项

  7. Python--day47--mysql执行计划

    1,什么是mysql执行计划? 让mysql预估执行操作:在要执行的语句前面加explain,就不会真的执行sql语句,只是给出了要执行的数据的情况,如大约有多少条,查询类型.

  8. HDU 1236

    水题~~但我做了很久: 题意:是中国人都懂了 思路:结构体排序: 以后要多用用重定义的排序手段,!!!!!多用!!多用!!多用!! #include<iostream> #include& ...

  9. [转]在eclipse中,用maven创建一个web项目工程

    1.在eclipse中用maven创建项目,右键new>>Maven Project 2.点击next继续 3.点击next继续,选择maven-archetype-webapp, 4.点 ...

  10. 高可用之keepalived的配置文件详解

    ! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover ...