Stacktrace Inerpreterを開発していますので、すべてのe.printStackTrace()呼び出しをprintTrace()にリダイレクトする方法はありますか?PrintStackTraceを自分自身の関数にリダイレクト
答えて
すべての例外に対して、e.printStackTrace()
の処理を置き換えることはできません。それは、サブクラスでオーバーライドすることができることを意味、非最終的だが、デフォルトの実装は単純です:
printStackTrace(System.err);
ですから、System.err
があるにフックすることを望むことができる唯一のこと。
System.err
を自分で選択したPrintStream
に置き換えることができます。
System.setErr(somePrintStream);
しかし、それはSystem.err
に送らすべてを取得します。すべてを扱うか、スタックトレース(some ideas are here)だけを抽出する必要があります。
e.printStackTrace()
の呼び出しをすべてあなたのメソッドの呼び出しで置き換えるほうが良いかもしれません(どちらにしても疑わしい値です)。
私はあなたがこれを行うことを提案するのが最善の方法を知りません。たとえば、の呼び出しをGoogle's errorproneのようなコンパイラツールで禁止することができます。
errorproneの調査結果に基づいて、置き換えを行うツールを見つけることもできます。
これは良い答えですが、私はそれが正確に質問に答えるのではなく、むしろ可能なアプローチ(OPが話しているものとは異なる)を教えていると感じています。個人的に、私はあなたの2番目の提案は、この答えをはるかに良くするいくつかの細部を使用することができると思う(再び、これは私がそれを見ている方法です...) – ItamarG3
これは楽しい、いいですが、プロフェッショナルのためのものであれば、基本的にはSentryのようなものを再生産しているので、既製のツールを購入する方がよいでしょう。
Andy Turnerは、printStackTrace()
を置き換えることができますが、非常に乱雑で信頼性の高いものではありません。 JavascriptやPythonのような言語は非常に簡単ですが、Javaでは、オブジェクト指向プログラミングの哲学に反しています(古い実装のJavaの制限があります)。しかし、方法を置き換えることができるPowermockというツールがあります。それを見せたいかもしれない。
私はSentryに言及したことを覚えていますか?これは、ロギングフレームワークを介して行います。とにかく、人々は通常slf4jのようなものに適切なロギングを行うために移行します。スタックトレースを印刷するのではなく、LOGGER.warn("Error communicating with client {}", ipAddr, e);
を実行します。ロガーの反対側には、異なるレベル(エラー、警告、情報、デバッグ、トレース)と異なるクラスを実際に記録するように設定されたアペンダーがあります。 Sentryがこれを行う方法はアペンダーを付けることです。あなたが同じことをした場合、あなたはちょうどe
を取得するフックを持っていたでしょう。
最後に1つ:いずれにしても、uncaughtExceptionHandlerを調べるとよいでしょう。あなたがすべての投げ札を捕まえていない限り、面白いものを見逃して、決してそれを記録しないかもしれません。
- 1. ログインフォーム自分自身に戻ってリダイレクト
- 2. 引数を自分自身に適用する関数?
- 3. 自分自身
- 4. なぜ自分自身を返すときに関数trigger valueOf?
- 5. JS - 自分自身を書き換える関数の混乱
- 6. 自分自身から関数を呼び出すJavascriptオブジェクト
- 7. JAVA Log4j:独自のパラメータで自分自身の関数を書く方法
- 8. joomlaに自分自身のグローバル変数とPHP関数を組み込む
- 9. 私自身のOrderBy関数
- 10. 自分自身との関係を持つテーブル
- 11. 自分自身へのクラスのJavaの関連
- 12. 自分自身の多人数一人のマネージャーにカスタム
- 13. 自分自身のPHP mvcフレームワークのhtaccess
- 14. 自分自身のディレクトリ内のUnauthorizedAccessException
- 15. Rに自身を返す関数?
- 16. Schemeで自分自身を呼び出す匿名関数のメカニズム?
- 17. Magentoのカスタマーログインページはエラーなしで自分自身にリダイレクトされます
- 18. 自分自身を削除するスクリプト
- 19. Objective-Cブロックと自分自身をキャプチャ
- 20. 自分自身を返すRubyメソッド
- 21. 自分自身への参照wsdl url
- 22. Spring MVC +自分自身のセキュリティモデル
- 23. 自分自身の「並べ替え」ボタン
- 24. 自分自身を呼び出す関数から配列をマージする
- 25. 自分自身を呼び出す関数をユニットテストする方法
- 26. 私自身の関数を書く
- 27. クラスは自動的に自分自身の友人ですか?
- 28. Laravel 5 auth-register自身にリダイレクト
- 29. 私自身のGROUP BY関数
- 30. libcurl URLが自分自身にリダイレクトされたときにリダイレクトを止める方法
'System.err'をあなたが選択した' PrintStream'で置き換えることができます。しかし、それは 'System.err'に送られたすべてのものを取得します。 –
'try-catch'ブロックを意味しますか? 'e.printStackTrace()'が何をするのかを変更することを意味しますか? – ItamarG3
開始する前に、ドキュメントを処理する例外を調べることをお勧めします(http://stackoverflow.com/documentation/java/89/exceptions-and-exception-handling#t=20170116170539288246) –