EventLogクラスを使用してWindowsイベントログを書く
この文は銀河の使者から転じたhttp://www.cnblogs.com/nokiaguy/archive/2009/02/26/1398708.html
作者の分かち合いに感謝します
OS:Windows XP SP 3
開発ツール:Visual Studio 2008
言語:C#3.0
.net Framework: 3.5
プログラムでは、指定された情報(例外情報や通常の処理情報を含む)をログに書き込むことがよくあります.C#3.0ではEventLogクラスを使用してWindowsログに各種情報を直接書き込むことができます.EventLogクラスはSystem.Diagnosticsネーミングスペースにあります.管理ツール>イベントビューア「では、次の図のようにWindowsログを表示できます.
次に、EventLogクラスを使用してアプリケーションにログを書き込む例を示します.ログタイプはEventLogEntryType列挙タイプで指定されます.
上のコードを実行すると、下図のようなログ情報が書き込まれます.
WriteEntryメソッドの最初のパラメータで指定した情報は、次の図に示すように、対応するログをダブルクリックして表示されます.
デフォルトではEventLogクラスはApplicationイベントにログを書き、EventLogの構築方法のパラメータで他のログを指定することもできます.システム(System)イベントのように、非Applicationイベントにログ情報を書き込む場合は、CreateEventSourceメソッドを使用してイベントソースを現在のイベントに追加する必要があります.次の例では、システムイベントにログ情報を追加する方法を示します.
上記のコードを実行した後、Systemイベントに書き込むログを下図に示します.
EventLogクラスを通じて自分のイベントを追加することもできます.コードは以下の通りです.
上のコードはMyEventイベントを追加し、追加したイベントビューアインタフェースは下図のように表示されます.
上の図から、左側のイベントビューアにMyEventイベントが複数存在することがわかります.
EventLogクラスを使用して、次のコードに示すように、指定されたイベント内のログを列挙することもできます.
上記のコードは、先ほど作成したMyEventイベントのすべてのログを列挙し、各ログの情報(WriteEntryメソッドの最初のパラメータで指定された情報)を出力しています.このほか、指定されたイベントをDeleteメソッドで削除したり、DeleteEventSourceメソッドでログソースを削除したりすることもできます.
Windowsのイベント・ログに書き込むときに注意してください.イベント・ログ・ファイルがいっぱいになっている場合は、イベント・プロパティ・ダイアログ・ボックス(イベント右クリック・メニューから「プロパティ」メニュー・アイテムを選択するとダイアログ・ボックスがポップアップされます)でログ・ファイルのサイズを増やしたり、現在のイベントのログを空にしたりできます.イベント・プロパティ・ダイアログ・ボックスは下図のように表示されます.
作者の分かち合いに感謝します
OS:Windows XP SP 3
開発ツール:Visual Studio 2008
言語:C#3.0
.net Framework: 3.5
プログラムでは、指定された情報(例外情報や通常の処理情報を含む)をログに書き込むことがよくあります.C#3.0ではEventLogクラスを使用してWindowsログに各種情報を直接書き込むことができます.EventLogクラスはSystem.Diagnosticsネーミングスペースにあります.管理ツール>イベントビューア「では、次の図のようにWindowsログを表示できます.

次に、EventLogクラスを使用してアプリケーションにログを書き込む例を示します.ログタイプはEventLogEntryType列挙タイプで指定されます.
EventLog log = new EventLog();
try
{
log.Source = " ";
log.WriteEntry(" 1", EventLogEntryType.Information);
log.WriteEntry(" 2", EventLogEntryType.Information);
throw new System.IO.FileNotFoundException("readme.txt ");
}
catch (System.IO.FileNotFoundException exception)
{
log.WriteEntry(" 2", EventLogEntryType.Error);
}
上のコードを実行すると、下図のようなログ情報が書き込まれます.

WriteEntryメソッドの最初のパラメータで指定した情報は、次の図に示すように、対応するログをダブルクリックして表示されます.

デフォルトではEventLogクラスはApplicationイベントにログを書き、EventLogの構築方法のパラメータで他のログを指定することもできます.システム(System)イベントのように、非Applicationイベントにログ情報を書き込む場合は、CreateEventSourceメソッドを使用してイベントソースを現在のイベントに追加する必要があります.次の例では、システムイベントにログ情報を追加する方法を示します.
EventLog log = new EventLog("System");
// , s
if(!EventLog.SourceExists("My Application"))
EventLog.CreateEventSource("My Application", "System");
try
{
log.Source = "My Application";
log.WriteEntry(" 1", EventLogEntryType.Information);
log.WriteEntry(" 2", EventLogEntryType.Information);
throw new System.IO.FileNotFoundException("readme.txt ");
}
catch (System.IO.FileNotFoundException exception)
{
log.WriteEntry(exception.Message, EventLogEntryType.Error);
}
上記のコードを実行した後、Systemイベントに書き込むログを下図に示します.

EventLogクラスを通じて自分のイベントを追加することもできます.コードは以下の通りです.
EventLog log = new EventLog("MyEvent");
// , s
if(!EventLog.SourceExists("New Application"))
EventLog.CreateEventSource("New Application", "MyEvent");
try
{
log.Source = "New Applications";
log.WriteEntry(" 1", EventLogEntryType.Information);
log.WriteEntry(" 2", EventLogEntryType.Information);
throw new System.IO.FileNotFoundException("readme.txt ");
}
catch (System.IO.FileNotFoundException exception)
{
log.WriteEntry(exception.Message, EventLogEntryType.Error);
}
上のコードはMyEventイベントを追加し、追加したイベントビューアインタフェースは下図のように表示されます.

上の図から、左側のイベントビューアにMyEventイベントが複数存在することがわかります.
EventLogクラスを使用して、次のコードに示すように、指定されたイベント内のログを列挙することもできます.
if (EventLog.Exists("MyEvent"))
{
EventLog log = new EventLog("MyEvent");
foreach (EventLogEntry entry in log.Entries)
{
textBox1.Text += entry.Message + ":";
}
}
上記のコードは、先ほど作成したMyEventイベントのすべてのログを列挙し、各ログの情報(WriteEntryメソッドの最初のパラメータで指定された情報)を出力しています.このほか、指定されたイベントをDeleteメソッドで削除したり、DeleteEventSourceメソッドでログソースを削除したりすることもできます.
Windowsのイベント・ログに書き込むときに注意してください.イベント・ログ・ファイルがいっぱいになっている場合は、イベント・プロパティ・ダイアログ・ボックス(イベント右クリック・メニューから「プロパティ」メニュー・アイテムを選択するとダイアログ・ボックスがポップアップされます)でログ・ファイルのサイズを増やしたり、現在のイベントのログを空にしたりできます.イベント・プロパティ・ダイアログ・ボックスは下図のように表示されます.
