Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中异常格式的统一_Java_Exception_Error Handling_Exception Handling_Try Catch - Fatal编程技术网

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

我正在编写一个Java应用程序,我想为我的异常使用一个统一的格式。比如:

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我们可以使用单元测试来检查日志内容与自定义异常的对比。