1

カスタム エラー ページを表示するために、web.config ファイルの customErrors 属性を使用しています。

<customErrors mode="On" defaultRedirect="/errorpage.aspx">
    <error statusCode="404" redirect="/404Page.aspx"/>
    <error statusCode="403" redirect="/403page.aspx"/>
</customErrors>

派手すぎるものはありません。ここでやりたいことは、これらのページのいずれかが読み込まれたときに発生するエラーをログに記録することです。私は特に例外に興味があります.404を受け取ったときにユーザーがどのページにいたかはあまり気にしません.

例外をキャプチャして、db テーブルに記録したいと思います。このようなものは機能しますか:

//errorpage.aspx
public void Page_Load(object sender,EventArgs e)
{
    Exception objErr = Server.GetLastError().GetBaseException();
    var err = new {Url = Request.Url.ToString(),
                   Message = objErr.Message,
                   Trace = objErr.StackTrace.ToString()};

    db.Errors.InsertOnSubmit(err);
    db.SubmitChanges();

    Server.ClearError();
}

キャプチャする価値がある、または一般的にエラーでキャプチャされる他の情報はありますか?

4

3 に答える 3

2

これを行うためのより良い方法があると思います:

  1. エルマーを使おう!
  2. Global.asaxApplication_Errorイベントでコードを実行します。

void Application_Error(object sender, EventArgs e)
{
   Exception ex = Server.GetLastError().GetBaseException();
   EventLog.WriteEntry("Test Web",
     "MESSAGE: " + ex.Message + 
     "\nSOURCE: " + ex.Source +
     "\nFORM: " + Request.Form.ToString() + 
     "\nQUERYSTRING: " + Request.QueryString.ToString() +
     "\nTARGETSITE: " + ex.TargetSite +
     "\nSTACKTRACE: " + ex.StackTrace, 
     EventLogEntryType.Error);
}
于 2010-10-27T18:32:45.937 に答える
0

エラー/例外がデータベースにアクセスできないことが原因である場合に何が起こったのか、単にアプリケーションサーバーのログを使用してみませんか。これが私がいくつかのウェブサイトでエラーを記録する方法です:

public static void WriteException(Exception exception)
{
    EventLog eventLog = null;
    try
    {
        StringBuilder message = new StringBuilder();
        message.Append("[").Append(exception.Source).Append(" - ").Append(exception.GetType().FullName);
        message.Append("]").Append(@"\r\n").Append(exception.ToString());              

        eventLog = new EventLog();
        eventLog.Log = "LOG_FILE_NAME";
        eventLog.Source = "APP_IDENTIFIER";
        eventLog.WriteEntry(message.ToString(), EventLogEntryType.Warning);
    }
    catch (Exception ex) {/*DO-NOTHING*/ string msg = ex.Message; }
    finally { if (eventLog != null) { eventLog.Dispose(); } eventLog = null; }
}
于 2010-10-27T19:44:33.200 に答える
0

独自に作成するのではなく、これをすべて処理できる Elmah のようなものを使用することを検討しましたか?

http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx

于 2010-10-27T18:30:02.430 に答える