これは私がしていることですが、メールの問題が原因でまだバグがあります。
DB には何も保持しません。DB にエラーがある場合、DB にそのエラーが発生することはありません。論理的には、挿入は失敗します。
そこで、bugs@mydomain.com のような特別なメール アドレスにメールを送信します。
件名: [アプリケーション名] [タイム スタンプ: ddmmyyyy hhmmss]
メッセージ: アプリケーション、エラー メッセージ、スタック トレース情報、ユーザー名などのセッション変数、リファラーなどのサーバー変数。
ASP.NET 開発者の最良の友はスタックトレース情報です。これにより、何が問題で、何が呼び出され、どこで呼び出されたかがわかります。
このシステムであなたが抱えている唯一の問題は、電子メールに問題があると何も得られないことです (電子メールを送信するときのいくつかの例外)。そのために、私は毎月の XML ファイル [errorLog_ mmm_yyyy.xml] に次のように追加し始めました。エラーをチェックしたい月と年のXMLをロードするグリッドビューを備えた単純な「ドラッグアンドドロップ」ページを作成しました。
try
{
// production code
}
catch(Exception ex)
{
Utilities.Mail.SendError(ex);
}
または最良の方法: global.asaxのApplication_Errorに追加します。
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Diagnostics" %>
<script language="C#" runat="server">
void Application_Error(object sender, EventArgs e)
{
//get reference to the source of the exception chain
Exception ex = Server.GetLastError().GetBaseException();
//log the details of the exception and page state to the
//Windows Event Log
EventLog.WriteEntry("myWebApplication name",
"MESSAGE: " + ex.Message +
"\nSOURCE: " + ex.Source +
"\nFORM: " + Request.Form.ToString() +
"\nQUERYSTRING: " + Request.QueryString.ToString() +
"\nTARGETSITE: " + ex.TargetSite +
"\nSTACKTRACE: " + ex.StackTrace,
EventLogEntryType.Error);
Utilities.Mail.SendError(ex);
}
</script>
上記のコードでイベント ログにエラーを追加すると、SendError(Exception) 関数で XML ファイルにエラーを追加します。