不同的异常报告

时间:2015-11-24 09:47:12

标签: 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();只是查看错误
  • Logger.getLogger(classname.class.getName()).log(Level.SEVERE, null, e1);如果我是正确的,那么级别在调试,信息和错误方面会有所不同。

为什么选择一个而不是另一个?我能想到的只是它报告的信息?因此,对于短错误,您只需打印异常,并在寻找实际问题时使用更大的东西。如果你知道会有异常,但不认为这很重要,可以抛出它吗?

Exception是否是一款用于测试代码的好工具?它可以替代Black-Box-testing吗?

1 个答案:

答案 0 :(得分:1)

您的问题主要是关于日志记录,根据您的要求和应用程序的复杂性,有几种方法可以执行此操作。它们之间明显存在差异,例如:

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

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

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

如果您使用的是控制台,则无法看到 err.println() out.println()之间的区别。显然,您可以配置它们,以便 err.println()输出文件中的所有错误。

Java Exception 类扩展 Throwable 并实现 Serializable 界面。 Exception从Throwable类继承所有以下方法:

  • getCause() - 返回Throwable,如果原因不存在,则返回null
  • getMessage() - 返回此throwable详细信息的String消息
  • getStackTrace() - 返回throwable的StackTraceElement []
  • printStackTrace() - 有两种变体如下所述

getStackTrace()使您可以以编程方式访问堆栈跟踪。

  

返回堆栈跟踪元素的数组,每个元素代表一个堆栈   帧。数组的第零个元素(假设数组的长度为   非零)表示堆栈的顶部,这是最后一个方法   按顺序调用。通常,这就是这个问题   throwable被创建并抛出。数组的最后一个元素   (假设数组的长度不为零)表示数组的底部   stack,这是序列中的第一个方法调用。

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

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

记录数据
  • 严重(最高)
  • 警告
  • INFO
  • 其他级别

日志框架可以用来做很多事情,下面列出了一些:

  • 记录简单短信
  • 记录级别以过滤不同的日志消息
  • 记录类别
  • 日志文件轮换
  • 配置配置文件,可以加载配置
  • 巨大的list继续

根据您正在开发的应用程序的要求,您可以使用许多日志记录框架:

  1. 的Log4j
  2. Java Logging API
  3. Apache Commons API
  4. herehere
  5. 中查看详情

    其中一些日志记录框架有基准测试结果,例如,请参阅here以比较Log4j,Logback和Java Logging API。

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

    Exception handling good for testing? No. 
    Is logging good for testing? No.
    

    异常处理是指处理意外情况。例如,您期望整数输入,然后您获得字符串。如果您不处理这样的情况,执行会中断,因此,您编写try和catch块来捕获此类异常,然后警告用户他/她应该仅输入整数。像这样有许多例外和例外导致代码的执行停止。如果用户能够停止执行您的代码,那么这不是一个好的程序,因此您需要异常处理才能处理任何类型的用户,输入的数据等。

    您无法使用异常处理进行测试,但它确实对您有所帮助。怎么样?异常处理可以与测试框架一起使用,以帮助您手动抛出不同类型的异常,然后使用异常处理代码处理它。

    记录不能用于测试,但可以用于测试。您可以将日志框架与测试框架(如JUnit)一起使用,以便运行测试以及记录测试执行期间发生的所有事件。您可以配置日志记录框架,以便在每次执行测试时创建一组特殊的日志文件。

    如果您希望进行日志记录并希望将来成为程序员(您可能已经是),您肯定需要使用测试框架进行测试,记录日志记录框架以及处理异常的异常处理。