参考链接: 用Java打印异常消息的3种不同方式

import lombok.Data;

/**

* @author 01369526

*

*/

@Data

@SuppressWarnings("serial")

public class MyException extends RuntimeException implements Serializable{

private int errorcode;

public MyException(int errorcode,String message,Throwable throwable)

{

super(message,throwable);

this.errorcode=errorcode;

}

}

import java.util.ArrayList;

import java.util.List;

/**

* @author 01369526

*

*/

public class Test {

public void test(int a)

{

if (a==0) {

try {

List<Integer> list=new ArrayList<>();

list.add(666);

list.get(5);

} catch (Exception e) {

throw new MyException(666,"数组错误",e);

}

}}

}

*/

public class Main {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

try {

new Test().test(0);

}

catch (MyException exception) {

// TODO: handle exception

System.out.println(exception.getErrorcode()+"\n"+exception.getMessage()+"\n");

exception.printStackTrace();

}

}

}

输出:

666

数组错误

MyException(errorcode=666)

at exception.Test.test(Test.java:20)

at exception.Main.main(Main.java:15)

Caused by: java.lang.IndexOutOfBoundsException: Index: 5, Size: 1

at java.util.ArrayList.rangeCheck(ArrayList.java:653)

at java.util.ArrayList.get(ArrayList.java:429)

at exception.Test.test(Test.java:17)

... 1 more

全局异常统一处理方法:  定义异常类统一设置值方法

/**

* 异常时设置result值工具类

* @author 01369526

*

*/

public class ExceptionSetUtil {

/**

*

* @param result

* @param code 错误代码

* @param message 错误消息

* @param logger 日志

* @param exception

*/

public static  <T> void setErrorCodeAndMessage(Result<T> result,String code,String message,Logger logger,Throwable exception) {

logger.error(message,exception);

result.setErrorCode(code);

result.setErrorMessage(message);

}

}

自定异常类

import lombok.Data;

@Data

@SuppressWarnings("serial")

public class ZnfjRuntimeException extends RuntimeException{

String code;

public ZnfjRuntimeException(String code ,String message)

{

super(message);

this.code = code;

}

public ZnfjRuntimeException(Throwable cause) {

super(cause);

}

/**

* @Description:构造错误码,错误描述和错误堆栈

* @param code

* @param message

* @param cause

*/

public ZnfjRuntimeException(String code, String message, Throwable cause) {

super(cause instanceof ZnfjRuntimeException?cause.getMessage():message,cause);

if(cause instanceof ZnfjRuntimeException) {

this.code = ((ZnfjRuntimeException) cause).getCode();

}else {

this.code = code;

}

}

public String getCode() {

return code;

}

public void setCode(String code) {

this.code = code;

}

}

设置AOP

import org.aspectj.lang.ProceedingJoinPoint;

import org.aspectj.lang.annotation.Aspect;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Component;

import com.sf.framework.domain.Result;

import dds.znfj.common.constant.ErrorCodeConstants;

import dds.znfj.common.exception.ZnfjRuntimeException;

import dds.znfj.common.utils.tdop.ExceptionSetUtil;

/**

* 统一日志处理类

*

* @author 01369526

*

*/

@Component

@Aspect

public class ServiceLogHandler {

private static final Logger logger = LoggerFactory.getLogger(ServiceLogHandler.class);

/*@Around("execution(* com.sf.tdop.*.service.impl.*.*.*(..))")*/

/*第一个*代表所有的返回值类型,第二个*代表所有的包,第三个代表所有的类,第四个*代表类所有方法,最后一个..代表所有的参数。*/

//@Around("execution(* com.sf.dds.znfj.container.service.impl.*.*.*(..))||execution(* com.sf.dds.znfj.task.service.impl.*.*.*(..))")

//  @Around("execution(* com.sf.dds.znfj.handover.service.impl.*.*.*(..))")

public Result<?> handleLog(ProceedingJoinPoint pjp) throws Throwable {

String name = pjp.getSignature().getName();

long startTime = System.currentTimeMillis();

logger.info("{}方法开始执行...", name);

Object[] args = pjp.getArgs();

for (Object obj : args) {

logger.debug("{}方法请求参数request:\n{\n{}\n}", name, obj);

}

Result<?> result = new Result<>();

try {

result = (Result<?>) pjp.proceed();

} catch (ZnfjRuntimeException e1) {

ExceptionSetUtil.setErrorCodeAndMessage(result, e1.getCode(), e1.getMessage(), logger, e1);

logger.error("error",e1);

return result;

}catch (Exception e) {

// TODO: handle exception

ExceptionSetUtil.setErrorCodeAndMessage(result,

ErrorCodeConstants.TdopCommonConstants.SYSTEM_ERROR_CODE,

ErrorCodeConstants.TdopCommonConstants.SYSTEM_ERROR_MESSAGE,

logger,

e);

logger.error("error",e);

return result;

}

long endTime = System.currentTimeMillis();

float time = (endTime - startTime) / 1000.0f;

logger.info("{}方法执行结束,耗时{}s", name, time);

logger.debug(

"{}方法返回结果response:\n{\n\"requestId\":{},\n\"success\":{},\n\"business\":{},\n\"errorCode\":{},\n\"errorMessage\":{},\n\"date\":{},\n\"version\":{},\n\"obj\":{}\n}",

name, result.getRequestId(), result.isSuccess(), result.getBusiness(), result.getErrorCode(),

result.getErrorMessage(), result.getDate(), result.getVersion(), result.getObj());

return result;

}

}

定义错误码:

public class ErrorCodeConstants {

private ErrorCodeConstants() {

}

/**

* @Description: SQL_EXCEPTION sql异常

*/

public static final String SQL_EXCEPTION      = "01";

/**

* @Description: IO_ERROR io异常

*/

public static final String IO_EXCEPTION       = "02";

/**

* @Description: SYSTEM_ERROR system异常

*/

public static final String SYSTEM_EXCEPTION   = "03";

/**

* @Description: SESSION_ERROR session异常

*/

public static final String SESSION_EXCEPTION   = "04";

/**

* @Description: CUSTOMER_EXCEPTION 自定义异常

*/

public static final String CUSTOMER_EXCEPTION  = "09";

/**

* @Description: DDS_ZNFJ_CORE_COMMON 公共基础模块

*/

public static final String DDS_ZNFJ_CORE_COMMON           = "101";

/**

/**

* @Description:公共基础模块

*/

public class TdopCommonConstants{

private TdopCommonConstants() {

}

public static final String INIT_SLICE_ERROR_CODE       = DDS_ZNFJ_CORE_COMMON + SQL_EXCEPTION + "001";

public static final String INIT_SLICE_ERROR_MESSAGE    = "初始化分片规则异常!";

public static final String SYSTEM_ERROR_CODE       = DDS_ZNFJ_CORE_COMMON + SYSTEM_EXCEPTION + "001";

public static final String SYSTEM_ERROR_MESSAGE    = "系统错误!";

}

最后加入扫描:

<context:component-scan base-package="dds.znfj" />

[转载] java自定义异常类以及全局log打印相关推荐

  1. java+自定义异常类+输入若干成绩 为负数时输出抛出异常_java+自定义异常类+输入若干成绩 为...

    java+自定义异常类+输入若干成绩 为 [2021-02-10 19:00:54]  简介: java中定义类的关键字是:"class".在Java中定义一个类,需要使用&quo ...

  2. Java自定义异常类以及异常拦截器

    Java自定义异常类以及异常拦截器 参考文章: (1)Java自定义异常类以及异常拦截器 (2)https://www.cnblogs.com/acm-bingzi/p/java_exception. ...

  3. Java 自定义异常类

    Java提供的异常类不够使用我们可以及自定义异常类: 格式: public class xxxException  extends  Exception/RuntimeException{ 添加一个空 ...

  4. java自定义异常类的父类_Java 自定义异常类

    /* *自定义异常类 * sun提供了很多的异常类给我们用于描述程序中各种的不正常情况,但是sun给我提供异常类还不足以描述我们现实生活中所有不正常情况,那么这时候我们就需要自定义异常类. * * 需 ...

  5. java自定义异常类

    下文笔者讲述使用java代码定义一个自定义异常的方法分享,如下所示: 在日常开发中,有些业务逻辑对应的异常类,系统并未进行定义,那么此时就需要我们自定义异常类进行实现,下文笔者将讲述自定义异常类的方法 ...

  6. java自定义异常类_java中自定义异常类

    hello,大家好,今天跟大家分享一下java中如何自定义异常,以后如果有新的心得,再添加,欢迎前辈指导... 首先,上Api,看一下异常和错误的父类: 然后,现在假设我有个循环(i=0;i<1 ...

  7. java 自定义异常类_Java实现自定义异常类

    自定义异常类步骤 创建一个类继承异常父类Exception 在具体的实现方法首部抛出异常类(自己创建的那个类),throws的运用 在具体的实现方法的内部抛出异常信息,throw的运用 创建一个类继承 ...

  8. java自定义异常类_Java抛出异常与自定义异常类应用示例

    本文实例讲述了Java抛出异常与自定义异常类.分享给大家供大家参考,具体如下: 异常处理常用方法: 常用的异常处理方法有: 一.try()catch() 语句 二.throw / throws 语句 ...

  9. Java——自定义异常类

    为什么要自定义异常类? 当我们在输入成绩,输入工资,取款的时候,往往都有一个范围,而这个范围不是JVM能够识别的,因此在输入的时候就容易出错,因此在这些时候JDK中的异常无法满足我们的需求,我们只能自 ...

最新文章

  1. ARKit 与 ARCore比对(三)
  2. 编译器会影响编译吗?
  3. java安全编码指南之:表达式规则
  4. 【源码系列】Eureka源码分析
  5. pip show pip可以查看pip的版本以及升级pip到最新版本
  6. 岗位多多,招聘 23人 | 中国农业科学院深圳农业基因组研究所诚聘博士后和科研人员...
  7. 从JVM的角度看JAVA代码--代码优化
  8. 如何改变php的语言变中文,修改Yii2的默认语言language为中文zh-CN的方法
  9. Java讲课笔记06:选择结构与条件循环
  10. 关于XIFF开发IM的一些想法
  11. 【面试】场景 智力题
  12. 在微软平台上运行 SAP 应用程序
  13. Arduino uno LED灯实验
  14. RHadoop的技术性文章
  15. 论文阅读——基于语法语义融合学习的功能代码克隆检测
  16. 算法实现: 在二叉树中找到两个节点的最近公共祖先
  17. 破解WIFI详细教程
  18. 车载网络测试 - 车载以太网 - 传统配置方法(Channel Base)
  19. linkedList手写
  20. 洛谷 P2056 采花 - 莫队算法

热门文章

  1. 筛选法建立初始堆_学术简报|基于库仑效率的退役锂离子动力电池储能梯次利用筛选...
  2. jquery自定义动画animate方法
  3. 根据需求进行批量新增
  4. 数据结构—B树(思维导图)
  5. [leetcode]1375. 灯泡切换器III
  6. 2015蓝桥杯C++A:奇妙的数字(枚举法)
  7. NYOJ 61:传纸条(一)(三维DP)
  8. C++ STL 一个简单的stack程序
  9. [再学Python] - 面向对象的程序设计- 对象和类
  10. [Python] 根据提供的函数对指定序列做映射:map() 函数