執筆者: インフラジスティックス・ジャパン株式会社 池原 大然

動作確認環境: Visual Studio 2010、.NET Framework 2.0、Windows 7 Enterprise 32 bit

更新日: 2010 年 5 月 21 日


System.Diagnostics.EventLog クラスを利用することでソフトウェア イベント、ハードウェア イベントについての情報を記録する Windows イベント ログにアクセスすることができます。ログを読み取る場合は EventLog.GetEventLogs() メソッドですべてのイベントログを取得するか、EventLog インスタンスを作成し、 Log (既定値は空文字 "")、MachineName (既定値はローカル コンピュータ ".") を指定することで指定されたマシンの特定のログを取得することができます。ローカル コンピュータのアプリケーションに関するイベントを取得し、情報の種類、ソース、ログが作成された時間を表示する場合は下記のようになります。

Visual Basic
Imports System.Text
Module Module1

    Sub Main()
        Dim logName As String = "Application"
        Dim machineName As String = "."
        Dim log As New EventLog(logName, machineName)
        Dim sb = New StringBuilder()

        For Each entry As EventLogEntry In log.Entries
            sb.Length = 0
            sb.Append("Type = ")
            sb.Append(entry.EntryType)
            sb.Append(" Source = ")
            sb.Append(entry.Source)
            sb.Append(" Time = ")
            sb.Append(entry.TimeGenerated)
            Console.WriteLine(sb.ToString())
        Next
        Console.ReadLine()
    End Sub
End Module
 

EventLogEntry クラスでは上記の他に実際の Message など色々な情報を保持しています。

この EventLog クラスは .NET Framework Version 1.0/1.1 では直接の呼び出し元に完全な信頼を求めます。Version 2.0 では EventLogPermission に特定のアクションが必要となるため、完全信頼でないアプリケーションにおいて使用する場合は注意してください。

イベント ログを書き込む場合は Source を指定するか作成する必要があります。新たに作成する場合はコンピューターの管理者権限が必要な点にも注意してください。"MySource" という Source が存在しているかどうかを判定し作成、更にアプリケーション ログに記録する場合は下記のようになります。

Visual Basic
Module Module1

    Sub Main()

        If Not EventLog.SourceExists("MySource") Then
            EventLog.CreateEventSource("MySource", "Application")
        End If

        Dim log As New EventLog()
        log.Source = "MySource"
        log.WriteEntry("Testing")
    End Sub
End Module
 

上記コードを Windows Vista 以降のユーザーアカウント制御 (UAC) が有効になっている OS で管理者権限を持たないアカウント、あるいは [管理者として実行] しない場合、SecurityException が発生します。回避するには実行ファイルを [管理者として実行] する、アプリケーション マニフェストを設定し、アプリケーションの実行時に管理者権限への昇格プロンプトを表示させる方法があります。

アプリケーション マニフェストの設定方法については [VB] .NET Framework 対応アプリケーションの起動の際に、管理者に昇格させるを参照してください。

関連リンク


Code Recipe Code Recipe

ページのトップへ