DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

イベントログに書き込まれたことを知る

イベントログにエントリが書き込まれたことを知るためには、EventLogオブジェクトのEnableRaisingEventsプロパティをTrueにし、EntryWrittenイベントを受け取ります。この方法で受け取れるのはローカルコンピュータでの書き込みのみで、リモートコンピュータでの書き込みを受け取ることはできません。

なおWindows Vista以降でUACが有効になっている時は、管理者に昇格しないと失敗するかもしれません。この対処法については、「Vista以降でUACが有効だとファイルの作成等に失敗する問題の対処法」をご覧ください。

次の例ではローカルコンピュータのアプリケーションログにエントリが書き込まれたとき、そのエントリの説明を表示するようにしています。このコードは、Windowsフォームアプリケーションのフォームクラス内に記述されているものとします。

VB.NET
コードを隠すコードを選択
'フォームの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
C#
コードを隠すコードを選択
//フォームの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プロパティを指定している部分について詳しくは、こちらをご覧ください。
  • 履歴:
  • 2014/1/7 UACに関する記述を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。