[转载] java自定义异常类以及全局log打印
参考链接: 用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打印相关推荐
- java+自定义异常类+输入若干成绩 为负数时输出抛出异常_java+自定义异常类+输入若干成绩 为...
java+自定义异常类+输入若干成绩 为 [2021-02-10 19:00:54] 简介: java中定义类的关键字是:"class".在Java中定义一个类,需要使用&quo ...
- Java自定义异常类以及异常拦截器
Java自定义异常类以及异常拦截器 参考文章: (1)Java自定义异常类以及异常拦截器 (2)https://www.cnblogs.com/acm-bingzi/p/java_exception. ...
- Java 自定义异常类
Java提供的异常类不够使用我们可以及自定义异常类: 格式: public class xxxException extends Exception/RuntimeException{ 添加一个空 ...
- java自定义异常类的父类_Java 自定义异常类
/* *自定义异常类 * sun提供了很多的异常类给我们用于描述程序中各种的不正常情况,但是sun给我提供异常类还不足以描述我们现实生活中所有不正常情况,那么这时候我们就需要自定义异常类. * * 需 ...
- java自定义异常类
下文笔者讲述使用java代码定义一个自定义异常的方法分享,如下所示: 在日常开发中,有些业务逻辑对应的异常类,系统并未进行定义,那么此时就需要我们自定义异常类进行实现,下文笔者将讲述自定义异常类的方法 ...
- java自定义异常类_java中自定义异常类
hello,大家好,今天跟大家分享一下java中如何自定义异常,以后如果有新的心得,再添加,欢迎前辈指导... 首先,上Api,看一下异常和错误的父类: 然后,现在假设我有个循环(i=0;i<1 ...
- java 自定义异常类_Java实现自定义异常类
自定义异常类步骤 创建一个类继承异常父类Exception 在具体的实现方法首部抛出异常类(自己创建的那个类),throws的运用 在具体的实现方法的内部抛出异常信息,throw的运用 创建一个类继承 ...
- java自定义异常类_Java抛出异常与自定义异常类应用示例
本文实例讲述了Java抛出异常与自定义异常类.分享给大家供大家参考,具体如下: 异常处理常用方法: 常用的异常处理方法有: 一.try()catch() 语句 二.throw / throws 语句 ...
- Java——自定义异常类
为什么要自定义异常类? 当我们在输入成绩,输入工资,取款的时候,往往都有一个范围,而这个范围不是JVM能够识别的,因此在输入的时候就容易出错,因此在这些时候JDK中的异常无法满足我们的需求,我们只能自 ...
最新文章
- ARKit 与 ARCore比对(三)
- 编译器会影响编译吗?
- java安全编码指南之:表达式规则
- 【源码系列】Eureka源码分析
- pip show pip可以查看pip的版本以及升级pip到最新版本
- 岗位多多,招聘 23人 | 中国农业科学院深圳农业基因组研究所诚聘博士后和科研人员...
- 从JVM的角度看JAVA代码--代码优化
- 如何改变php的语言变中文,修改Yii2的默认语言language为中文zh-CN的方法
- Java讲课笔记06:选择结构与条件循环
- 关于XIFF开发IM的一些想法
- 【面试】场景 智力题
- 在微软平台上运行 SAP 应用程序
- Arduino uno LED灯实验
- RHadoop的技术性文章
- 论文阅读——基于语法语义融合学习的功能代码克隆检测
- 算法实现: 在二叉树中找到两个节点的最近公共祖先
- 破解WIFI详细教程
- 车载网络测试 - 车载以太网 - 传统配置方法(Channel Base)
- linkedList手写
- 洛谷 P2056 采花 - 莫队算法
热门文章
- 筛选法建立初始堆_学术简报|基于库仑效率的退役锂离子动力电池储能梯次利用筛选...
- jquery自定义动画animate方法
- 根据需求进行批量新增
- 数据结构—B树(思维导图)
- [leetcode]1375. 灯泡切换器III
- 2015蓝桥杯C++A:奇妙的数字(枚举法)
- NYOJ 61:传纸条(一)(三维DP)
- C++ STL 一个简单的stack程序
- [再学Python] - 面向对象的程序设计- 对象和类
- [Python] 根据提供的函数对指定序列做映射:map() 函数