1

以下のコードを使用して、年の日付ごとに作成されたファイルに書き込んでいます。このコードは、ASP.Net アプリで未処理の例外が発生するたびに実行されます。私の問題は、多くのユーザーが Web サイトを使用している場合、複数のエラーが同時に発生したためにこのコードがヒットし、同じファイルの作成または書き込みが複数要求される可能性があることです。この場合、ファイルへの書き込みに関連するコードを 1 つの要求だけで実行するための解決策は何ですか?

   private void Application_Error(object sender, EventArgs e) 
{ 
    // Code that runs when an unhandled error occurs
    string errorGuid    = Guid.NewGuid().ToString("D");
    if (HttpContext.Current.Server.GetLastError() != null)
    {
        Exception err = HttpContext.Current.Server.GetLastError();
        string header = String.Format("/*****\t\t{0}:{1}\t\t*****/", "Start", errorGuid);
        string footer = String.Format("/*****\t\t{0}:{1}\t\t*****/", "End", errorGuid);
        string errorText = String.Format("{0}{5}Exception DateTime: {1}{5}Reference #: {2}{5}Exception:{5}=========={5}{3}{5}{4}{5}", header, System.DateTime.Now, errorGuid, err.ToString(), footer, Environment.NewLine);

        // '~/ErrorReports/Logs/ErrorLog.log' must exist, else we will get an error 

        using (System.IO.TextWriter write = new System.IO.StreamWriter(HttpContext.Current.Server.MapPath("~/ErrorReports/Logs/ErrorLog_" + DateTime.Now.ToShortDateString() + ".log"), true, System.Text.Encoding.UTF8))
        {
            write.WriteLine(errorText);
            write.Close();
        }
    }
}
4

1 に答える 1

1

1 - シングルトン パターンを使用して、このファイルの作成/追加を処理するクラスを作成できます。

2 - 「ロック」を使用

3 - 提案どおり、elmah を使用する

于 2012-10-26T03:41:40.217 に答える