イベントログにエントリが書き込まれたことを知るためには、EventLogオブジェクトのEnableRaisingEventsプロパティをTrueにし、EntryWrittenイベントを受け取ります。この方法で受け取れるのはローカルコンピュータでの書き込みのみで、リモートコンピュータでの書き込みを受け取ることはできません。
なおWindows Vista以降でUACが有効になっている時は、管理者に昇格しないと失敗するかもしれません。この対処法については、「Vista以降でUACが有効だとファイルの作成等に失敗する問題の対処法」をご覧ください。
次の例ではローカルコンピュータのアプリケーションログにエントリが書き込まれたとき、そのエントリの説明を表示するようにしています。このコードは、Windowsフォームアプリケーションのフォームクラス内に記述されているものとします。
'フォームのLoadイベントハンドラ Private Sub Form1_Load(sender As Object, e As System.EventArgs) _ Handles MyBase.Load 'EventLogオブジェクトの作成 Dim elog As New System.Diagnostics.EventLog() 'コンピュータ名を指定する '指定しないとローカルコンピュータとなる elog.MachineName = "." 'ログの名前を指定する '指定しないと"Application"となる elog.Log = "Application" 'EntryWrittenイベントを受信するようにする elog.EnableRaisingEvents = True 'イベントハンドラがフォームを作成したスレッドで実行されるようにする elog.SynchronizingObject = Me 'EntryWrittenイベントハンドラを追加する AddHandler elog.EntryWritten, AddressOf elog_EntryWritten End Sub 'イベントログにエントリが書き込まれたとき Private Sub elog_EntryWritten(sender As Object, _ e As System.Diagnostics.EntryWrittenEventArgs) '書き込まれたエントリのメッセージを表示する Console.WriteLine(e.Entry.Message) End Sub
//フォームのLoadイベントハンドラ private void Form1_Load(object sender, System.EventArgs e) { //EventLogオブジェクトの作成 System.Diagnostics.EventLog elog = new System.Diagnostics.EventLog(); //コンピュータ名を指定する //指定しないとローカルコンピュータとなる elog.MachineName = "."; //ログの名前を指定する //指定しないと"Application"となる elog.Log = "Application"; //EntryWrittenイベントを受信するようにする elog.EnableRaisingEvents = true; //イベントハンドラがフォームを作成したスレッドで実行されるようにする elog.SynchronizingObject = this; //EntryWrittenイベントハンドラを追加する elog.EntryWritten += new System.Diagnostics.EntryWrittenEventHandler(elog_EntryWritten); } //イベントログにエントリが書き込まれたとき private void elog_EntryWritten( object sender, System.Diagnostics.EntryWrittenEventArgs e) { //書き込まれたエントリのメッセージを表示する Console.WriteLine(e.Entry.Message); }
Visual Studioでは、「ツールボックス」の「コンポーネント」内に「EventLog」があります。フォームデザイナを使って、「EventLog」コンポーネントをフォームに配置して使用することもできます。初心者の方には、この方法の方が簡単かもしれません。
補足:上記のコードのSynchronizingObjectプロパティを指定している部分について詳しくは、こちらをご覧ください。