イベントログにログのレコード(エントリー)を書き込む - C#

C#でイベントログにレコードを書き込むコードを紹介します。

概要

イベントログに書き込む場合は EventLog クラスのWriteEntry メソッドを利用します。

プログラム例

Windows Formアプリケーションを作成します。

UI

下図のUIを作成します。フォームにボタンを1つ配置します。

コード

下記のコードを記述します。ボタンのClickイベントを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;

namespace WriteEventLogSimple
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      string SourceName = "SimpleEventLog Write";

      if (EventLog.SourceExists(SourceName) == false) {
        EventLog.CreateEventSource(SourceName, "");
        //EventLog.CreateEventSource(SourceName, "Application");
      }

      string Message = "イベントログの書き込みテストです。";
      int Eventid = 64000;
      EventLog.WriteEntry(SourceName, Message, EventLogEntryType.Information, Eventid);
    }
  }
}

解説

ログの書き込み前にログのイベントソースを作成する必要があります。ソース名は文字列で設定します。SourceExists() メソッドを呼び出しソース名のイベントソースがあるかを確認します。イベントソースが存在しない場合は、CreateEventSource() メソッドを呼び出しイベントソースを作成します。CreateEventSource の第一引数に作成するイベントソース名、第二引数にソースのエントリが書き込まれるログの名前を与えます。ログの名前は、"Application"、"System"、カスタムイベントログの名称を与えることができます。名前を空欄にした場合は "Application" が指定された場合と同様の動作になります。
  string SourceName = "SimpleEventLog Write";
  if (EventLog.SourceExists(SourceName) == false) {
    EventLog.CreateEventSource(SourceName, "");
    //EventLog.CreateEventSource(SourceName, "Application");
  }

下記のコードによりイベントログへ書き込みをします。WriteEntry() メソッドの第一引数に、イベントソース名、第二引数にイベントログに書き込むメッセージ、第三引数にイベントの種類、第四引数にイベントのIDを与えます。
  string Message = "イベントログの書き込みテストです。";
  int Eventid = 64000;
  EventLog.WriteEntry(SourceName, Message, EventLogEntryType.Information, Eventid);

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。[button1]をクリックします。


ボタンをクリックすると下図の System.Security.SecurityEception 例外が発生します。これは管理者権限でアプリケーションが実行されていないため、ログへの書き込みができないためです。


ビルドされたアプリケーションから管理者権限で実行します。


実行ファイルを右クリックし、ポップアップメニューを表示します。メニューの[管理者として実行]をクリックします。


管理者としてアプリケーションが実行されます。[button1]をクリックします。冷害などは発生しません。


イベント ビューアーを開きイベントログを確認します。左側のツリービューで[Windows ログ]ノード内の[Application]ノードをクリックして選択します。下図の画面が表示されます。イベントログを確認すると、"SimpleEventLog Write" のソースのイベントログが書き込まれていることが確認できます。


イベントログの詳細を確認します。メッセージやイベントIDもプログラムで指定した値が書き込まれていることが確認できます。



イベントログに書き込みができました。

補足

常に管理者権限で実行する場合

管理者権限で起動できない場合、 System.Security.SecurityEception 例外が発生します。そのため、アプリケーションを常に管理者権限で起動したい場合があります。常に管理者権限で起動する方法についてはこちらの記事を参照してください。

イベントソースを作成しない場合

CreateEventSource() によりイベントソースを作成せずに、WriteEntry() メソッドを呼び出した場合でもイベントログの書き込みができてしまいます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2018-08-28
iPentec all rights reserverd.