質問

現在、大量の既存のクライアント/サーバー アプリケーションが稼働しています。場合によっては、クライアントがデータの一部にアクセスするために、何らかの種類の Web インターフェイスを追加したい場合があります。これらは通常カスタムですが、一部は「汎用」です。ただし、誰もが独自の VM 内に独自の「インスタンス」を持っています。

私が必要としているのは、これらの VM で発生したエラーをキャプチャしてログに記録するための集中領域です。

新しいデータベースを作成し、これらの Web アプリのそれぞれが集中データベースとローカルの EventLog にログ エントリを作成できるようにする WCF サービスを設定することを検討しています。

それは悪いデザインですか?

アップデート

Web アプリは 2003/IIS6 および 2008/IIS7 上にあり、ASP.NET に組み込まれています。インスタンスの多くは Web サーバーのペア上にありますが、多くは個別の VM にデプロイされます。

役に立ちましたか?

解決

これがまさに私たちがそれを実装した方法です。

データベースには 3 つのテーブルがあります。

Event Types
------------ 
EventType int 
EventDescription varchar(50)


MonitoredSystems
---------------
SystemID int
SystemName varchar(50)
SystemDescription text


Events
-------
RecordID bigint
EventTime datetime
SystemID int FK
EventText text
EventType int FK
Acknowledged bit

イベントを閲覧できるサイトも開設しました。「承認済み」フィールドでは、「未承認の重大な問題」という名前のビューを設定して、新しい問題をすぐに確認し、読んだときに承認できるようにします。

これを行うことができるツールが他にもあることは知っていますが、自社で開発したバージョンほど簡単に統合できるツールはありませんでした。現在、私たちは構築するすべてのアプリでこのツールを使用しています。ここでは言及しませんが、他のツールではすぐに提供されないカスタマイズがいくつかあります。

ですからあなたの考えはそれでいいと思います。自分で構築する場合は、希望どおりに動作するようにカスタマイズできます。ただし、少なくとも Log4net などのツールを検討することをお勧めします。

他のヒント

ELMAH (エラーログモジュールとハンドラー) を見てみる必要があります (http://code.google.com/p/elmah/) Orbit One の Exception Reporter (http://aspExceptionreporter.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=35343) これらを組み合わせると、一元的な場所でエラー報告を企業全体に適用できるようになります。

頻繁にログを記録する場合 (デバッグ/情報/警告)、RPC 呼び出しが非同期で行われるようにしてください。

より柔軟なデータ構造をお勧めします。

Events
-------
RecordID bigint
EventTime datetime
EventLevel text 
SystemID text
EventText text
EventType text
Acknowledged bit

EventProperties
-------
RecordID bigint
key text
value text

EventProperties を使用すると、事前にそのようなプロパティを定義しなくても、ログ アプリケーションで役立つ可能性のある情報をログに記録できます。SystemID には制約がないため、構成せずにシステムを追加できることに注意してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top