You need to sign in to do that
Don't have an account?
ikou
Apexにて実行中のClassNameを取得する方法
ApexCodeでエラーや想定外時のハンドリング処理を書いています。
この時に発生したクラス名をログに残したいのですが、 実行中のクラス名を取得するシステムメソッドのようなものはないのでしょうか?
System.getClassName();
的な感じで現在のクラス名が返ってくると嬉しい
そういったシステムメソッドがない場合は、定数としてクラス名などを書いて対応するくらいしかないのですかね:smileysad:
Apexコードで実行中のクラス名を取得するようなシステムコールは、残念ながら今の所実装されていません。
また定数としてクラス名に書いた場合、Apexクラスが入れ子に呼び出されている場合などにエラーの発生箇所が特定できないかと思います。
そこでFroce.comに標準で例外の通知をEメールで送信する機能があるのでそちらを利用しては如何でしょうか。
個人設定から「Apex 警告電子メールの送信」をチェックしておけば、Apexでハンドリングされない例外が起きた場合に、エラー発生箇所も含めてメールで通知してくれます。
以下の様な具合です。
================
Version:1.0 StartHTML:0000000149 EndHTML:0000000674 StartFragment:0000000199 EndFragment:0000000640 StartSelection:0000000199 EndSelection:0000000640Apex script unhandled exception by user/organization: 00580000001YhR6/00D80000000Ku38
Visualforce ページ: /apex/test
caused by: System.ListException: List index out of bounds: 2
Class.TestController.init: line 9, column 15
External entry point
Debug Log:
***/apex/test のログの開始ページ
(以下略
================
是非ご検討頂ければ。
すみません間違えて「解決策」にしてしまいましたが、やはりクラス名を取得するようなシステムメソッドはないんですね。「Apex 警告電子メールの送信」は一つの手かもしませんが、私はエラーをcatchしてハンドリングした時に
ログとして残したかったので、ハンドリングしていないエラーはそもそも想定外でした。
ただ、そういった想定外の処理が行われた場合に通知させることは重要ですね。
にikouにより編集されたメッセージ超亀レスですが、一応コメント。
ExceptionクラスのgetStackTraceString()メソッドで、スタックトレースなら取得できます。
私は、例外キャッチして画面上に「システム管理者に連絡してください。」と表示して、
管理者のメールアドレスに組織名、ユーザ名、例外メッセージ、スタックトレースを送信するような仕組みにしています。