答えて

7

はい、これを行う方法があります。

グローバルのApplication_Errorイベント。asaxファイル、System.HttpUnhandledExceptionとして最後の例外を取得します。あなたのコードは次のようになります。

var lastException = Server.GetLastError() as HttpUnhandledException; 
string Ysod = lastException.GetHtmlErrorMessage(); 
// your call to emailing routine follows 

私は他の人の意見に同意します。 ELMAHでもこれを行うことができます。

+0

私はELMAHを使いたくない理由を知っていますが、これは私が確かに求めていた答えです。私が推測するようなサードパーティーのモジュールですでに溢れている忙しいプロジェクトに別の依存関係を抱かせたくありませんでした。 – nicknystrom

+1

私が探していたことはまさに私のプロジェクトでElmahを使用していましたが、ユーザーが管理者の場合は、友好的なエラーメッセージだけでなく詳細なYSODを表示したいと思います。 –

+0

私はElmahを他のプロジェクトで使っていましたが、この場合は具体的には、エラーログを制御したいのです。これは、元の質問に適切に答えて、今日はまだ立っている*一口* – ppumkin

2

ELMAHあなたは自動的に尋ねていることを確認してください。

2

私は一般的に、ユーザーにYSODを体験させたくないと言います。これは、エラーをキャプチャし、ユーザーに、より優雅なエラーページを可能にする前に、私は、Webアプリケーションに置かれている何か...

protected void Application_Error(object sender, EventArgs e) 
{ 
    MailMessage msg = new MailMessage(); 
    HttpContext ctx = HttpContext.Current; 

    msg.To.Add(new MailAddress("[email protected]")); 
    msg.From = new MailAddress("[email protected]"); 
    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"); 
} 
9

私はELMAH (Error Logging Modules and Handlers for ASP.NET)になります

ELMAH(エラーログモジュールおよび ハンドラ)は、アプリケーション全体のエラー ロギング機能です。完全に です。実行中のASP.NET Webアプリケーションに を動的に追加するには、 の再コンパイルまたは再デプロイメントを一切必要とせず、マシン上の またはすべてのASP.NET Webアプリケーション をマシンに追加することができます。ほぼすべての未処理の例外の

  • ログ:ELMAH一度

    はあなたのコードの単一 行を変更せずに、次の 施設を取得し、 実行中のWebアプリケーション内に落下し、適切 を設定されています。

  • 記録された例外のログ全体をリモートで表示するWebページ。
  • 記録されたいずれかの詳細情報をリモートで表示するWebページ 例外。
  • 多くの場合、 の元の黄色の画面では、 の例外に対してASP.NETが生成されました。カスタムエラーモード をオフにしても確認できます。
  • 各エラーの発生時の電子メール通知。
  • ログから最後の15個のエラーのRSSフィード。
1

未処理の例外がアプリケーションで発生するたびにGlobal.asaxファイル内のApplication_Errorイベントがトリガされます。 Server.GetLastError()メソッドを使用して発生した最後の例外を取得できます。

同様に、独自のカスタムエラーページは、web.configファイルのcustomErrorsセクションのweb.configで指定して作成できます。デフォルトファイルを指定することで、そこに例外がルーティングされたときにカスタムコーディングを行うことができます。

関連する問題