参考链接: 用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. ATS插件中配置文件自动更新思路
  2. bugku 杂项 就五层你能解开吗_你能解开这个和数字有关的逻辑解谜游戏吗? | 每日一考...
  3. iOS动画系列之八:使用CAShapeLayer绘画动态流量图
  4. Matlab心得及学习方法(不断更新)
  5. 【Cocos2d-X(2.x) 游戏开发系列之三】最新版本cocos2d-2.0-x-2.0.2使用资源加载策略
  6. C++ Opengl 绘制二次几何体源码
  7. extjs展示列表,显示来很多空白行,但是数据没显示
  8. Java主函数要放在哪个类里_JAVA:主函数一定要放在静态内部类里吗
  9. 无法打开登录 'ASPState' 中请求的数据库。登录失败。
  10. 学校计算机房主机系统,学校机房电脑系统恢复的方法
  11. lh服务器注册,登不进去的人请看这里:LH服无法登录问题官方解释
  12. matlab 三角函数 积化和差,三角函数积化和差与和差化积公式
  13. 重装window系统总结
  14. 双鱼板mind+环境下设置
  15. Ironic-Python-Agent
  16. 20162316刘诚昊 第六周作业报告
  17. 如何通过cmd查看python版本
  18. 谷歌获批GAN专利,一整套对抗训练网络被收入囊中
  19. vue中keepAlive缓存清除的问题
  20. 双目摄像头立体成像(三)双目摄像头的标定及测距(Ubuntu16.04 + OpenCV)

热门文章

  1. 在VS2015中使用SDL2.0
  2. Android底部日期控件,Android开发中实现IOS风格底部选择器(支持时间 日期 自定义)...
  3. 对java并发性的理解,【图片】你了解过Java并发编程:性能、扩展性和响应的高端操作吗?【java吧】_百度贴吧...
  4. ssh备份linux系统,远程自动备份 rsync+ssh+sshpass
  5. WPF MVVM模式 带CheckBox的树形图
  6. bootstrap 输入错误提示_网上体育用品商城(ssm,mysql,bootstrap,html,css)
  7. [leetcode]136. 只出现一次的数字
  8. OpenGL基础26:Assimp库
  9. bzoj 1688: [Usaco2005 Open]Disease Manangement 疾病管理(状压)
  10. 莫队(bzoj 2038: [2009国家集训队]小Z的袜子(hose))