[转载] 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中的异常无法满足我们的需求,我们只能自 ...
最新文章
- ATS插件中配置文件自动更新思路
- bugku 杂项 就五层你能解开吗_你能解开这个和数字有关的逻辑解谜游戏吗? | 每日一考...
- iOS动画系列之八:使用CAShapeLayer绘画动态流量图
- Matlab心得及学习方法(不断更新)
- 【Cocos2d-X(2.x) 游戏开发系列之三】最新版本cocos2d-2.0-x-2.0.2使用资源加载策略
- C++ Opengl 绘制二次几何体源码
- extjs展示列表,显示来很多空白行,但是数据没显示
- Java主函数要放在哪个类里_JAVA:主函数一定要放在静态内部类里吗
- 无法打开登录 'ASPState' 中请求的数据库。登录失败。
- 学校计算机房主机系统,学校机房电脑系统恢复的方法
- lh服务器注册,登不进去的人请看这里:LH服无法登录问题官方解释
- matlab 三角函数 积化和差,三角函数积化和差与和差化积公式
- 重装window系统总结
- 双鱼板mind+环境下设置
- Ironic-Python-Agent
- 20162316刘诚昊 第六周作业报告
- 如何通过cmd查看python版本
- 谷歌获批GAN专利,一整套对抗训练网络被收入囊中
- vue中keepAlive缓存清除的问题
- 双目摄像头立体成像(三)双目摄像头的标定及测距(Ubuntu16.04 + OpenCV)
热门文章
- 在VS2015中使用SDL2.0
- Android底部日期控件,Android开发中实现IOS风格底部选择器(支持时间 日期 自定义)...
- 对java并发性的理解,【图片】你了解过Java并发编程:性能、扩展性和响应的高端操作吗?【java吧】_百度贴吧...
- ssh备份linux系统,远程自动备份 rsync+ssh+sshpass
- WPF MVVM模式 带CheckBox的树形图
- bootstrap 输入错误提示_网上体育用品商城(ssm,mysql,bootstrap,html,css)
- [leetcode]136. 只出现一次的数字
- OpenGL基础26:Assimp库
- bzoj 1688: [Usaco2005 Open]Disease Manangement 疾病管理(状压)
- 莫队(bzoj 2038: [2009国家集训队]小Z的袜子(hose))