java - 不同的异常报告

标签 java logging error-handling exception-handling black-box-testing

我只是在考虑Java异常。有许多不同的类型,它们都为自己工作。我很好奇的是对它们的处理。例如

try
{
    //Protected code
}catch(ExceptionName e1)
{
    //Catch block
}

在大块中,有多种方法可以报告异常。
我发现了几个,但我认为周围还有更多:
  • System.err.println(e1);用于调试
  • system.println.out(e1);仅查看本地验证的错误
  • e1.printStackTrace();仅查看错误
  • Logger.getLogger(classname.class.getName()).log(Level.SEVERE, null, e1);,如果我正确的话,其中级别在调试,信息和错误方面可能有所不同。

  • 为什么要选择一个?我所能想到的只是报告的信息?因此,对于短暂的错误,您只需打印Exception,而在查找实际问题时将使用更大的内容。而且,如果您知道会有异常(exception),但又不认为这很重要,可以抛出它吗?

    异常处理是测试代码的好工具吗?可以代替Black-Box-testing吗?

    最佳答案

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

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

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

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

    如果使用控制台,则将看不到 err.println() out.println()之间的区别。您显然可以对其进行配置,以便 err.println()在文件中输出所有错误。

    Java的 Exception 类扩展了可 throw 并实现了可序列化的接口(interface)。 Exception从Throwable类继承以下所有方法:

  • getCause()-如果原因不存在,则返回Throwable或null。
  • getMessage()-返回此可抛
  • 的详细信息的字符串消息
  • getStackTrace()-返回可抛出的
  • 的StackTraceElement []
  • printStackTrace()-下文描述了两种变体

  • getStackTrace()允许您以编程方式访问堆栈跟踪。

    Returns an array of stack trace elements, each representing one stack frame. The zeroth element of the array (assuming the array's length is non-zero) represents the top of the stack, which is the last method invocation in the sequence. Typically, this is the point at which this throwable was created and thrown. The last element of the array (assuming the array's length is non-zero) represents the bottom of the stack, which is the first method invocation in the sequence.



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

    好了,现在回到日志记录。有几种日志记录框架可让您以不同的严重性级别记录数据。例如,您有一个企业应用程序,并且您希望根据以下内容记录数据:
  • SEVERE(最高)
  • 警告
  • 信息
  • 其他级别

  • 日志记录框架可以做很多事情,下面列出了一些:
  • 记录简单文本消息
  • 日志级别以过滤不同的日志消息
  • 日志类别
  • 日志文件轮播
  • 配置配置文件,可以加载配置文件
  • 巨大的list继续

  • 您可以根据要开发的应用程序的需求使用一堆日志记录框架:
  • Log4j
  • Java记录API
  • Apache Commons API
  • herehere中查看更多信息

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

    根据项目的需要,项目的复杂性和希望实现的日志记录级别,您可以有很多选择。
    Exception handling good for testing? No. 
    Is logging good for testing? No.
    

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

    您不能将异常处理用于测试,但是可以帮助您。怎么样?异常处理可以与测试框架一起使用,以帮助您手动引发不同类型的异常,然后使用您的异常处理代码片段对其进行处理。

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

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

    关于java - 不同的异常报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33890248/

    相关文章:

    具有多个相同 ArrayList 元素的 Java 有效方法

    logging - 从配置文件更改 WebSphere 日志记录级别

    python - python-flask处理应用程序错误

    go - 使用/pkg/errors 与 golang 1.13 格式动词 %w 一起处理错误

    java - 如何改变JTextField的大小?

    java - 将 int 作为 boolean 值返回

    java - MethodValidationPostProcessor 导致进一步验证失败

    java - Web 应用程序的 logback xml 配置

    java - 如何将 log4j.properties 文件转换为 log4j2.xml 或 log4j2.properties 文件

    ruby-on-rails-3 - Rails : Change displayed error column names