3

私は現在、社内で作成された多くのカスタム アプリケーションを扱う会社で働いています。現在、多くのことについて基準がありません。このプログラムで発生したエラーを記録/追跡する方法を実装したいと思います (ほとんどは asp.net です)。

現在、Application Error メソッドの Global.asax でこれを処理することを考えています。まず、情報をエラー ログ/追跡データベースに保存しようとします。それが失敗した場合は、電子メールを送信してみてください。

エラー メッセージやその他のアプリケーション変数 (ページ、ユーザー名など) から取得するのに最も役立つ情報はどれですか。

現在、2 つのテーブルを使用することを考えています。1 つは一般的なエラーとアプリケーションの情報を取得するためのもので、もう 1 つは例外情報を保持するためのものです。これは、1 つのアプリケーション レベルの例外から発生する内部例外を処理するための 1 対多の関係になります。

私は多くの詳細を見逃していると確信しており、この問題を処理するためのあなたの戦略を聞きたいと思っています.

4

10 に答える 10

3

ELMAHはあなたが探しているものかもしれません

于 2008-10-26T05:49:30.743 に答える
2

ログ ライブラリ (Log4Net など) を使用する場合、さまざまなログ アペンダーを設定して、コード内で単一のログ呼び出しを行いながら、電子メール、DB、ファイル、イベント ログなどにログを記録できます。この投稿では、開始するために必要なすべてをカバーしています。

ASP.NET ヘルス モニタリングもあります。

編集: ASP.NET エラーを記録するのに最適で、実行中のアプリに動的に「注入」できる ELMAH について言及した別のポスター。

于 2008-10-26T05:59:27.697 に答える
1

https 経由で到着した機密情報の可能性がある情報をログに記録する場合は、十分に注意してください。ユーザーは、エンドツーエンドで暗号化されることを期待します (これは法的要件である可能性があります)。普通の電子メールで送信しないようにしてください。

通常、get、post、cookie、フォームの状態 (ASPNET 内)、ユーザー エージェント、その他のヘッダー、日付/時刻、サーバー マシンなどを含むすべての要求をログに記録します。

ただし、場合によっては、永続的に記録する必要のない情報がログに記録されることがあります (クレジット カード番号が支払いプロバイダーに渡されるなど)。メールで送るのはもっとひどい。

HTTPS がオンになっているかどうかを確認することをお勧めします。オンになっている場合は、ログに記録する情報の量を減らして、この問題を回避してください。フィールドが空か空でないかを示す文字列を送信しました。

于 2008-10-26T05:57:17.593 に答える
1

これは私がしていることですが、メールの問題が原因でまだバグがあります。

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 ファイルにエラーを追加します。

于 2008-10-25T19:36:17.143 に答える
1

Jeff Atwood が優れた Exception Handler を作成しました。CodeProjectで参照してください。

できるだけ多くの情報を収集しようとします。スタック情報 セッション情報 エラーの場所

また、例外情報をシステムに保存するためにアプリケーションが呼び出す Web サービスもセットアップします。

于 2008-10-25T19:16:21.083 に答える
0

サーバー上のカスタム イベント ログや、その他のログと通知にログを記録することをお勧めします。エラーの原因がインフラストラクチャの問題である場合、同じ問題により、エラー ハンドラーが電子メールを送信したり、データベースに保存したりできない可能性もあります。

于 2009-09-09T01:25:18.820 に答える
0

出回っている Web サイトのエラー報告アプリケーションに不満を感じていたため、Clearwind Consulting で独自のエラー報告アプリケーションを作成しました。これは無料で、社内のプロジェクトで使用しています。完全なエラー コード、ブラウザーの種類、トレースバック、エラーの原因となったコードのスニペット、30 日間にわたってグラフ化されたエラー頻度など、完全なエラー情報が提供されます。Clearwind では、Web アプリケーションの開発を行っています。ウェブサイトに関して効率的に使用できる実際のデータを提供するツールが必要でした。

Web サイトでエラーが発生した場合の通知方法を選択できます。RSS、電子メール、または最適な方法をすべて使用して、エラー通知を受け取ることができます。はい、お酒を飲みながらエラーを iPhone に送信できます。Django で完全に記述されているため、データにタグを付けたりフォーマットしたりする場合は、JSON、RoR、XML、CSV などを使用できます。または、ウェブサイトにアクセスしてください。

よろしければ、www.areciboapp.com をご覧ください。

これは無料で、どの Web サイトにも簡単に追加 (または削除) でき、単なる 404 ではなく、エラーを修正するための実際の情報を提供します。あなたとあなたのウェブサイトに役立つかどうか見てみましょう。そうかもしれません。

于 2009-09-09T01:12:08.287 に答える
0

ロギングは良好ですが、アプリケーションの監視はより優れています。

注意:私はCALMの作者です

于 2008-10-26T05:46:27.537 に答える
0

実際、解決策をかなりよく考えているように聞こえます。

私は Web 開発ショップで働いているので、エラーのログ記録に加えて、データベース クエリの失敗などのシステムの重大なエラーもメールで送信されるようにして、それらに飛びついてすぐに修正できるようにしています。

別の方法として、各アプリケーションでスローされた各エラーに関する情報と、電子メールで必要な関連情報を提供するレポートを毎日電子メールで送信することを検討してください。

エラーのタイムスタンプと例外メッセージの全文を含む、すべてのエラーをそのアプリケーションの単一のテーブルに記録します (もちろん、データベースがすべて社内に含まれているアプリケーションで作業している場合は、これを行う方が簡単です)。もメールされました。

例外メッセージには関数トレースが含まれているため、元の呼び出し関数が何であったか、スタック内のすべての関数のファイル番号と行番号がわかります。これにより、特定のバグのバックトラッキングが非常に簡単になります。

于 2008-10-25T19:15:53.347 に答える
0

データベースへのログ記録が失敗した場合、サーバーのイベント ログまたは Log.txt ファイルに書き込むことができます。ここでの選択は、それらを含む Web サーバーにアクセスできるかどうかによって部分的に異なります。

迅速な対応が必要な場合は、エラー通知メールを送信することをお勧めします。しかし、それらをスキャンするためのエラーのリストはありません。

これを行うには、ユーザー情報 (ID、利用可能な場合は名前)、すべてのセッション変数、すべてのフォーム変数を含むプロパティを持つ特別なカスタム例外クラスを作成します (フォームがどのように入力され、ユーザーが入力したかを確認できます) 、およびエラーが発生した場所 (どのページ、どのクラス、どのメソッド) のスタック トレースを超えた何らかの表示。また、呼び出されたストアド プロシージャの名前と送信されるパラメーター、または SQL 自体も含めます。また、すべての例外プロパティ (スタック トレースなど)。そして、DisplayMessage および InternalMessage フィールド。DisplayMessage がユーザーに表示されます。InternalMessage はログに記録され、デバッグ モードのときにカスタム エラー ページに表示されます。

基本ページの Page_Error でログを記録し、Application_Error でフェイルセーフとして記録します。

ときどき、web.config にキーと値のペアを追加して、電子メール アドレス (または配布リスト) を含めます。そのキーに値がある場合、通知メールが送信されます。値がない場合、email は送信されません。その後、テスト中または生産の初期段階で、問題に関する個人的な通知をすぐに受け取ることができます。最初の期間が経過したら、web.config で電子メール アドレスを削除します。

于 2008-10-25T19:17:40.457 に答える