Share via


ログのガイドライン

イベント ログには、システムに代わって重要なイベントのレコードと、システムで実行されているアプリケーションが格納されます。 ログ機能は汎用であるため、ログ記録に適した情報を決定する必要があります。 一般に、ハードウェアまたはソフトウェアの問題の診断に役立つ可能性のある情報のみをログに記録する必要があります。 イベント ログは、トレース ツールとして使用するためのものではありません。

ログに記録するイベントの選択

イベント ログが役立つケースの例を次に示します。

  • リソースの問題。 メモリ割り当てが失敗したときに警告イベントをログに記録すると、メモリ不足の状況の原因を示すのに役立ちます。
  • ハードウェアの問題。 デバイス ドライバーでディスク コントローラーのタイムアウト、並列ポートでの電源障害、またはネットワークまたはシリアル カードからのデータ エラーが発生した場合、デバイス ドライバーは、システム管理者がハードウェアの問題を診断するのに役立つこれらのイベントに関する情報をログに記録できます。
  • 不良セクター。 ディスク ドライバーが不良セクターに遭遇した場合、操作を再試行した後にセクターから読み取ったり、セクターに書き込んだりできる可能性がありますが、最終的にはセクターは不良になります。 ディスク ドライバーを続行できる場合は、警告イベントをログに記録する必要があります。それ以外の場合は、Error イベントをログに記録する必要があります。 ファイル システム ドライバーが多数の不良セクターを検出して修正した場合、警告イベントのログ記録は、管理者がディスクが故障しようとしている可能性があることを判断するのに役立つ可能性があります。
  • 情報イベント。 サーバー アプリケーション (データベース サーバーなど) は、ユーザーのログオン、データベースの開き方、またはファイル転送の開始を記録します。 サーバーは、エラー (ファイルにアクセスできない、ホスト プロセスが切断されたなど)、データベースの破損、ファイル転送が成功したかどうかなどの他のイベントをログに記録することもできます。

メッセージの書き込み

メッセージは、問題のトラブルシューティングを行おうとしている管理者とユーザーに適している必要があります。 メッセージには、問題の原因とその修正方法を理解するために必要なすべての情報が含まれている必要があります。

"I/O サブシステムから受信したドライバー パケットが無効でした。 データはパケットです。より良いメッセージは、問題のドライバーが正しく機能しているが、誤ってフォーマットされたパケットをログに記録していることを示します。 問題を解決するには、Unicode バージョンのドライバーが必要であると言えます。 適切なエラー メッセージの書き込みの詳細については、「 エラー メッセージのガイドライン」を参照してください。

イベント ログはコンマまたはタブ区切りのテキスト ファイルとして保存できるため、メッセージ テキストではタブまたはコンマを使用しないでください。 多くの組織では、これらのファイルをデータベースにインポートします。追加の書式設定文字には手動操作が必要です。

UNC 名またはスペースを含む他のリンクを使用する場合は、名前を山かっこで囲みます。 たとえば、 <\\sharename\サーバー名>です。 ユーザーに関連するヘルプ資料を示す URL をメッセージの末尾に書き込むことができます。 URL は完全修飾 DNS ホスト名である必要があります。 たとえば、次のテキストをメッセージに追加できます。"このメッセージの追加情報については、 のサポート サイトhttps://www.microsoft.com/Support/ProdRedirect/ContentSearch.asp."を参照してください。このリンクにより、エラー メッセージに関連するコンテンツにユーザーをリダイレクトする ASP ページが表示されます。 追加のパラメーター (URL がクリックされたときに渡されます) を解析して、ユーザーをリダイレクトする場所を決定します。

ReportEvent 関数に渡される引数は、次のように URL に追加されます。

strHTTPQuery += L"?EvtSrc=" + _strEscapedSource;
strHTTPQuery += L"&EvtCat=" + _strEscapedCategory;
strHTTPQuery += L"&EvtID=" + _strEscapedEventID;
strHTTPQuery += L"&EvtCatID=" + _strEscapedCategoryID;
strHTTPQuery += L"&EvtType=" + _strEscapedType;
strHTTPQuery += L"&EvtTypeID=" + _strEscapedTypeID;
strHTTPQuery += L"&EvtRptTime=" + _strEscapedDateAndTime;
strHTTPQuery += L"&EvtTZBias=" + _strEscapedTimeZoneBias;

イベント ソースのメッセージ DLL ヘッダーの会社名、製品名、製品バージョン、ファイル名、ファイル バージョンが有効な場合は、URL にも追加されます。

ADD_VER_STR(L"CoName",   _strEscapedCompanyName);
ADD_VER_STR(L"ProdName", _strEscapedProductName);
ADD_VER_STR(L"ProdVer",  _strEscapedProductVersion);
ADD_VER_STR(L"FileName", _strEscapedFileName);
ADD_VER_STR(L"FileVer",  _strEscapedFileVersion);

オーバーヘッドの削減

イベント ログは、ディスク領域やプロセッサ時間などのリソースを消費します。 イベント ログに必要なディスク領域の量と、イベントをログに記録するアプリケーションのオーバーヘッドは、ログに記録する情報の量によって異なります。 このため、重要な情報のみをログに記録することが重要です。 また、メイン コード パスではなく、コード内のエラー パスにイベント ログ呼び出しを配置すると、パフォーマンスが低下します。

各イベント ログ レコードに必要なディスク領域には、 EVENTLOGRECORD 構造体のメンバーが含まれます。 これは可変長構造体です。文字列とバイナリ データは、 構造体の後に格納されます。