Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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_Logging_Error Handling_Exception Handling_Black Box Testing - Fatal编程技术网

Java 不同的异常报告

Java 不同的异常报告,java,logging,error-handling,exception-handling,black-box-testing,Java,Logging,Error Handling,Exception Handling,Black Box Testing,我只是在考虑java异常。有许多不同的类型,他们都为自己的一部分工作。我好奇的是如何处理它们。比如说 try { //Protected code }catch(ExceptionName e1) { //Catch block } 在catch blok中,有多种方法可以报告异常。 我已经找到了几个,但我想还有更多: System.err.println(e1)用于调试 system.println.out(e1)仅查看本地验证的错误 e1.printStackTrace(

我只是在考虑java异常。有许多不同的类型,他们都为自己的一部分工作。我好奇的是如何处理它们。比如说

try
{
    //Protected code
}catch(ExceptionName e1)
{
    //Catch block
}
在catch blok中,有多种方法可以报告异常。 我已经找到了几个,但我想还有更多:

  • System.err.println(e1)用于调试
  • system.println.out(e1)
    仅查看本地验证的错误
  • e1.printStackTrace()仅查看错误
  • Logger.getLogger(classname.class.getName()).log(Level.SEVERE,null,e1)如果我是正确的,则调试、信息和错误的级别可能会有所不同
为什么你会选择一个而不是另一个?我能想到的只是它报告的信息?因此,对于短错误,您只需打印异常,同时查找实际问题,您可以使用更大的错误。如果你知道会有一个例外,但不认为它很重要,你能扔了它吗


异常处理是测试代码的好工具吗?它是否可以替代黑盒测试?

您的问题主要是关于日志记录的,根据您的需求和应用程序的复杂性,有几种方法可以做到这一点。它们之间有明显的区别,例如:

System.out.println()使用Scanner类的PrintStream out静态对象将传递的参数打印到控制台中。println()是PrintStream类的一个方法。绝对不是一个合适的日志记录解决方案

System.println.out()我认为System类中不存在这样的方法,请参阅

System.err.println()确实存在,并且还是PrintStream类的静态对象。这是标准错误输出流,它已经打开,正在等待接收应该引起用户注意的数据

如果您使用的是console,您将无法看到err.println()out.println()之间的差异。显然,您可以对它们进行配置,以便err.println()输出文件中的所有错误

Java的类扩展了Throwable并实现了Serializable接口。Exception从Throwable类继承以下所有方法:

  • getCause()-如果原因不存在,则返回Throwable或null
  • getMessage()-返回此可丢弃项的详细信息的字符串消息
  • getStackTrace()-返回可丢弃文件的StackTraceElement[]
  • printStackTrace()-有两种变体,如下所述
getStackTrace()提供对堆栈跟踪的编程访问

返回堆栈跟踪元素数组,每个元素表示一个堆栈 框架数组的第0个元素(假定数组的长度为 非零)表示堆栈的顶部,这是最后一个方法 顺序中的调用。通常情况下,这是 创建并抛出了throwable。数组的最后一个元素 (假设数组的长度非零)表示数组的底部 堆栈,这是序列中的第一个方法调用

printStackTrace()或printStackTrace(PrintStream s)没有PrintStream参数的第一个函数在标准错误输出流中打印stacktrace(正确猜测!即err.println())。如果希望在文件中打印stacktrace,则传递指向文件或其他目标的printStackTrace()方法PrintStream

好的,现在回到日志记录。有几种日志框架允许您以不同的严重性级别记录数据。例如,您有一个企业应用程序,并且希望基于该应用程序记录数据

  • 严重(最高)
  • 警告
  • 信息
  • 其他级别
日志框架可以做很多事情,下面列出了一些:

  • 记录简单的文本消息
  • 用于筛选不同日志消息的日志级别
  • 日志类别
  • 日志文件循环
  • 能够加载配置的配置文件
  • 巨浪还在继续
根据您正在开发的应用程序的需求,您可以使用一系列日志框架:

  • Log4j
  • Java日志API
  • ApacheCommonsAPI
  • 在和中查看更多信息
  • 其中一些日志框架有基准测试结果,例如,请参阅Log4j、Logback和Java日志API的比较

    根据项目的需要、复杂性和您希望实现的日志记录级别,您有很多选择

    Exception handling good for testing? No. 
    Is logging good for testing? No.
    
    异常处理是指当您处理意外情况时。例如,您需要整数输入,然后得到字符串。如果不处理此类场景,则执行会中断。因此,可以编写try-and-catch块来捕获此类异常,然后警告用户只应输入整数。与此类似,存在许多异常,异常导致代码的执行暂停。如果用户能够停止代码的执行,那么这不是一个好程序,因此,您需要异常处理来处理任何类型的用户、输入的数据等

    您不能使用异常处理进行测试,但它确实可以帮助您。怎么用?异常处理可用于测试框架,以帮助您手动抛出不同类型的异常,然后使用您的异常处理代码段进行处理

    日志记录不能用于测试,但可以用于测试。您可以将日志框架与测试框架(如JUnit)一起使用,以便运行测试并记录测试执行期间发生的所有事件。您可以配置日志框架w