たとえば、Global.asaxエラーハンドラからのerorrレポート電子メールで使用するYSOD出力をキャプチャしたいと思います。内蔵のysodジェネレーターを活用する方法はありますか?
6 に答える
ELMAH(ASP.NETのエラーログモジュールとハンドラー)を調べます:
ELMAH(Error Logging Modules and Handlers)は、完全にプラグイン可能なアプリケーション全体のエラーログ機能です。再コンパイルや再展開を行うことなく、実行中のASP.NET Webアプリケーション、またはマシン上のすべてのASP.NETWebアプリケーションに動的に追加できます。
ELMAHを実行中のWebアプリケーションにドロップして適切に構成すると、コードを1行も変更せずに、次の機能を利用できます。
- ほぼすべての未処理の例外のログ。
- 再コーディングされた例外のログ全体をリモートで表示するためのWebページ。
- ログに記録された例外の詳細をリモートで表示するためのWebページ。
- 多くの場合、customErrorsモードがオフになっている場合でも、ASP.NETが特定の例外に対して生成した元の黄色の画面を確認できます。
- エラーが発生したときの各エラーの電子メール通知。
- ログからの最後の15エラーのRSSフィード。
はい、これを行う方法があります。
global.asaxファイルのApplication_Errorイベントで、最後の例外をSystem.HttpUnhandledExceptionとして取得します。コードは次のようになります。
var lastException = Server.GetLastError() as HttpUnhandledException;
string Ysod = lastException.GetHtmlErrorMessage();
// your call to emailing routine follows
私は他の人のコメントに同意します。ELMAHでもこれを行うことができます。
ELMAHについて聞いたことがありますか?それはあなたが本当に欲しいすべての機能をあなたに与えるかもしれません...
これについて少し説明するブログ投稿があります:http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx
ELMAHをチェックして、あなたが求めていることを自動的に実行する必要があります。
一般的に言って、ユーザーにYSODを体験してほしくないのです。これは、エラーをキャプチャして、ユーザーにより適切なエラーページを表示できるようにするために、以前にWebアプリに配置したものです...
protected void Application_Error(object sender, EventArgs e)
{
MailMessage msg = new MailMessage();
HttpContext ctx = HttpContext.Current;
msg.To.Add(new MailAddress("me@me.com"));
msg.From = new MailAddress("from@me.com");
msg.Subject = "My app had an issue...";
msg.Priority = MailPriority.High;
StringBuilder sb = new StringBuilder();
sb.Append(ctx.Request.Url.ToString() + System.Environment.NewLine);
sb.Append("Source:" + System.Environment.NewLine + ctx.Server.GetLastError().Source.ToString());
sb.Append("Message:" + System.Environment.NewLine + ctx.Server.GetLastError().Message.ToString());
sb.Append("Stack Trace:" + System.Environment.NewLine + ctx.Server.GetLastError().StackTrace.ToString());
msg.Body = sb.ToString();
//CONFIGURE SMTP OBJECT
SmtpClient smtp = new SmtpClient("myhost");
//SEND EMAIL
smtp.Send(msg);
//REDIRECT USER TO ERROR PAGE
Server.Transfer("~/ErrorPage.aspx");
}
Global.asaxファイルのApplication_Errorイベントは、アプリケーションで未処理の例外が発生するたびにトリガーされます。Server.GetLastError()メソッドを使用して、最後に発生した例外を取得できます。
同様に、web.configファイルのcustomErrorsセクションの下にあるweb.configで指定することにより、独自のカスタムエラーページを作成できます。デフォルトファイルを指定することにより、例外がそこにルーティングされるときに任意のカスタムコーディングを行うことができます。