打印堆栈跟踪,显示“警告”而不是“错误”

时间:2019-02-22 07:57:24

标签: java

我有这个代表警告,而不是异常/错误。

new Error("Warning: Callback fired more than once.").printStackTrace(System.err);

看起来是这样:

java.lang.Error: Warning: Callback fired more than once.

我的问题是,如何创建警告而不是错误,像这样:

new Warning("Warning: Callback fired more than once.").printStackTrace(System.err);

以便打印出来:

java.lang.Warning: Warning: Callback fired more than once.

4 个答案:

答案 0 :(得分:4)

您应该简化日志记录框架来执行此操作。根据您使用的方式,它看起来像logger.warn("Callback fired more then once.")。如果还需要堆栈跟踪,则可以将其添加到日志消息中。如果没有涉及的日志记录框架,有时可能会变得不方便,则可以将警告打印为标准输出:System.out.println("Warning: Callback fired more than once.")

答案 1 :(得分:2)

您可以创建自己的异常类型

public class Warning extends RuntimeException {
  //override constructors
}

然后您将可以执行

之类的操作

new Warning("Warning: Callback fired more than once.").printStackTrace(System.err);

答案 2 :(得分:1)

您不能直接执行此操作,一种可能的方法是使用记录器:

public static void main(String[] args) {
    java.util.logging.Logger logger = java.util.logging.Logger.getLogger("");
    logger.warning("warn message");
}

答案 3 :(得分:1)

你不能。

  

以便打印出来:

java.lang.Warning:

java.lang程序包是“密封的”,您不能在该程序包中创建自己的类。

从这个角度来看,您可以实现的 best 是创建自己的RuntimeException子类,以

结尾
your.com.whatever.Warning: Warning

除此之外,其他答案是正确的:这是一个已解决的问题。您将要重新发明轮子,所以真正的答案是退后一步,研究日志记录框架,并使用它。还要首先研究如何使用Java异常,您的代码抛出Error实例是错误的!对于严重的错误条件,错误是JVM本身引发的真正可怕的事情。不应将它们用于代码中的错误或您在此处考虑的任何断言。