

play framework (2.3) で、例外の補足を総合的にとらえる方法は無いでしょうか？

通常のリクエスト処理中の例外は GlobalSettings.onError で捕らえられますが、

[code]

    def action = Action{
     Ok.chunked(Enumerator.outputStream(o => csvWrite(o)) >>> Enumerator.eof)
    }
    def csvWrite(o:OutputStream) = throw new Exception()
    
[/code]

のように Enumerator.outputStream
などを使って非同期で書き出ししたい場合など、その内部(上の例だとcsvWrite)で例外が起こった場合、コンソールにdebugレベルでエラーが記述されるだけです。

やりたいことは、例外をキャッチしてエラーレベルでスタックトレース付きのログを吐きたい（そしてアラートメールなどを出したい）のです。もちろん個別に try-
catch
して処理することはできますが、どこかで忘れそう。なので、アプリケーション全体で一つ（あるいはいくつか）設定すれば大丈夫みたいな仕組みを探しているのですが、ありますでしょうか？


CC BY-SA 3.0
2014-12-18T05:36:07.947
1987
2014-12-18T05:50:23.923
3466
question
scala playframework
GlobalSettings.onError で捕らえられない例外の処理方法


あまり自信ないし、おそらくこのパターンで救えない酷い例もある

(例 <https://github.com/playframework/playframework/pull/3707> )

と思いますが、一つ考慮すべき点としては、play関係なくScala自体の `ExecutionContext`
が、catchされなかった例外を処理する機構を持っているので、そこを明示的に設定した `ExecutionContext` を使う、とかでしょうか？

デフォルトでは、`printStackTrace` するだけの実装が使われるはずです。

  * <https://github.com/scala/scala/blob/v2.11.4/src/library/scala/concurrent/ExecutionContext.scala#L175>
  * <https://github.com/scala/scala/blob/v2.11.4/src/library/scala/concurrent/ExecutionContext.scala#L137>


CC BY-SA 3.0
2014-12-18T05:50:23.923
1992
2014-12-18T05:50:23.923
56
1987
answer