2017-01-19 3 views
1

EventLogEntryオブジェクトを取得し、それらを処理するために、Eventlog.Entries(c#.NET 4.0)を使用してアプリケーションイベントログを読んでいます。新しいイベントがイベントログに書き込まれると、EventLogEntry.Indexプロパティは常に増加するように見えます。イベントログをクリアしても、EventLogEntry.Indexはリセットされません。EventLogEntry.IndexがMaxIntに達するとどうなりますか?

EventLogEntry.Indexがmaxintに達した場合はどうなりますか?オペレーティングシステムはインデックスをリセットしましたか?

私はサーバ(win2008R2)上で動作するサービスを書いており、非常に多くのイベントログが発生すると想定しなければなりません。最終的には21億に達するでしょう。

+0

実際に起こったときに何が起こるかを知っておく必要がありますが、非常に多くのログレコードで実用に耐えています。私は[管理ポリシー](https://technet.microsoft.com/en-us/library/cc721981(v= ws.11).aspx)を設定して、常に管理可能なログサイズを確保しています。また、EventLogがログメッセージの正しいシンクであるかどうかを検討する必要があります。たぶん別の手法(ログファイル、リングバッファなど)が良い解決策かもしれません。 –

+0

イベントを上書きするようにイベントログが設定されていても、管理可能なログサイズを指定すると、インデックスは引き続き大きくなります。私が書いたように、ログをクリアしてもインデックスはリセットされません。これを実際に使用するには、SQL Serverデータベースに選択したイベントログを格納して分析し、アーカイブする必要があります。 – Pelle

+0

はい、そうです。私はあなたの質問で、 "EventLogEntry.Indexをリセットしません"イベントログをクリアすることを忘れました、申し訳ありません。 (実際には、それも[希望の動作]であるようです(https://social.technet.microsoft.com/Forums/itmanagement/en-US/25c7bdba-258b-44e6-87ba-d40e68b6b4e2/resetting-the-eventrecordid-for -a-windows-2008-r2-event-log?forum = winservergen);これについて考えると意味があります...) –

答えて

3

EventLogEntry.Indexプロパティは、RecordNumberフィールドのWindows APIを介してthe EVENTLOGRECORD structureから取得されます。

The documentation for RecordNumberは、明示的に述べている:

EVENTLOGRECORDのRecordNumberメンバーは、イベント・ログ・レコードのレコード番号 が含まれています。イベント に書き込まれた最初のレコードはレコード番号1であり、他のレコードは順番に番号が付けられています。 レコード番号がULONG_MAXに達すると、次のレコード番号は ,0になります。ただし、ゼロを使用してレコードを検索します。

ULONG_MAX「はC」プリプロセッサ値であり、C#のuint.MaxValueに実際に相当している、しかしそれが聞こえるかもしれ混乱ことを注意...

はまた、intとして残念ながらEventLogEntry.Index戻り、このuintを注意したがって、2^31を超えると、負になります。

正しく動作するようにするには、2^31〜2^32-1の値が正しく処理されるように、それをuintにキャストします。それはそれをその時点で-1に達するまで

MaxInt後の次のインデックスがそうで-2147483648ことが、その後、-2147483647となります。特にあなたの質問「?EventLogEntry.IndexはMAXINTに達したときに何が起こる」と答えるために

0に折り返して正常にカウントアップを開始します。

の場合は、しかし、あなたは、インデックスがuint.MaxValue1から行くだろうし、それが0に戻ってラップするuintintをキャスト。

関連する問題