【问题标题】:Exceptions not showing up in console unless explicitly caught除非明确捕获,否则不会在控制台中显示异常
【发布时间】:2017-02-19 00:12:53
【问题描述】:

我正在使用 SparkJava,除非我明确捕获它们,否则路由中引发的异常似乎不会显示在控制台中。

例如,给定

Spark.post("/lookup", this::lookup);

private String lookup(Request req, Response res) {
    // some stuff
    return json.toString();
}

如果// some stuff 抛出异常,控制台中不会出现任何内容。但是,如果我明确捕获并打印异常,它会按预期将其打印到控制台。

private String lookup(Request req, Response res) {
    try {
    // some stuff
    } catch(Exception e) {e.printStackTrace();}
    return json.toString();
}

这让我相信,在路由调用堆栈的更深处,所有异常都会被捕获并隐藏。

您可以想象,这种行为会导致一些相当令人沮丧的调试。有什么办法可以让所有异常始终显示在控制台中?

【问题讨论】:

  • 尝试搜索“Java spark 吞咽异常”
  • 您有特定的链接吗?我尝试搜索,但找不到任何东西(也许我只是一个糟糕的搜索者:()
  • 不,我只知道图书馆吞下异常并不少见。例如,我使用的是 Quil 库(用于 Clojure),默认情况下它会吞下所有异常。但是,它有一个选项可以正常允许异常。我从来没有使用过 SparkJava,但如果这是它吞咽异常,它可能有一个设置。抱歉,我无法提供更多帮助。

标签: java logging exception-handling spark-java


【解决方案1】:

在您的 Main 类中,在任何路线之前,添加以下内容:

    exception(Exception.class, (exception, request, response) -> {
        exception.printStackTrace();
    });

您的应用程序代码未捕获的任何异常现在都将转储到控制台。

(IMO Spark 默认应该这样做...)

【讨论】:

  • 非常感谢!我转向了一个丑陋的解决方案,将我的所有路由都放在一个捕获任何异常的包装类中;这看起来好多了。绝对同意这应该是默认的..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多