Java中异常格式的统一
我正在编写一个Java应用程序,我想为我的异常使用一个统一的格式。比如:Java中异常格式的统一,java,exception,error-handling,exception-handling,try-catch,Java,Exception,Error Handling,Exception Handling,Try Catch,我正在编写一个Java应用程序,我想为我的异常使用一个统一的格式。比如: try{ //... } catch(Exception e){ log(clazz.getSimpleName() + ":" + e.getMessage() + ":" + e); } 这意味着日志中的每个异常将大致呈现以下方面: <class_name>.java: <message>: <exception> .java:: 我总是可以使用一个静态方法编写一个'E
try{
//...
} catch(Exception e){
log(clazz.getSimpleName() + ":" + e.getMessage() + ":" + e);
}
这意味着日志中的每个异常将大致呈现以下方面:
<class_name>.java: <message>: <exception>
.java::
我总是可以使用一个静态方法编写一个'ExceptionAler
'类,该方法记录接收类名和异常实例本身的异常,但我不确定这是否是一个过度杀伤力
有什么优雅的方法可以做到这一点吗?您可以在构造函数中抛出自定义异常并记录
public class CustomException() extends Exception {
public CustomException(Exception ex) {
super(ex);
log(ex.getStackTrace[0].getClassName() + ":" + ex.getMessage());
}
}
然后在您的捕获中
} catch(Exception e){
throw new CustomException(e);
}
Sara,你可以使用一些日志库,比如log4j、slf4j或logbackSeems,它们对我来说非常优雅e
可能必须经过处理才能在log()
方法中实际获取堆栈跟踪,否则您可能会得到一个对象reference@SilverNak实际上我使用的是log4j,但问题是不同的:我想在我的异常中确保一种格式。无论你做什么,都不仅仅是+e
——原始的异常必须被链接,否则你以后会在调试问题上遇到困难,任何维护你的系统的人都会永远诅咒你的名字。@j.seashell thanks这可能会产生不同的行为,因为您必须确保总是抛出CustomException
。否则,日志中可能会出现一个从未抛出的异常。(我知道,这是一种非常罕见的情况,但想想那些将异常保存在变量中而不是立即抛出异常的人)我会尽量避免所有捕获和重新引用。@SilverNak我们可以使用单元测试来检查日志内容与自定义异常的对比。