C#でイベントログを書き込みます。
環境:Vista, .NET Framework 3.5, Visual Studio 2008
イベントソースの確認・作成
イベントログを書き込むためには、事前にイベントソースを作成する必要があります。
※管理者権限がある場合、指定したソースが存在しなくても自動的に作成されます。
if (!System.Diagnostics.EventLog.SourceExists(source))
{
System.Diagnostics.EventSourceCreationData data =
new System.Diagnostics.EventSourceCreationData(source, logName);
}
リモートコンピュータのソースを確認・作成する場合は、コンピュータ名を指定します。
if (!System.Diagnostics.EventLog.SourceExists(source, machineName))
{
System.Diagnostics.EventSourceCreationData data =
new System.Diagnostics.EventSourceCreationData(source, logName);
data.MachineName = machineName;
System.Diagnostics.EventLog.CreateEventSource(data);
}
イベントログの書き込み(登録)
イベントログに書き込みます。ソースとメッセージは必須です。
System.Diagnostics.EventLog.WriteEntry(source, message);
全て指定した場合は、下記のようになります。
System.Diagnostics.EventLog.WriteEntry(source, message, System.Diagnostics.EventLogEntryType.Error, eventId, category, rowData);
リモートコンピュータへイベントログを書き込む場合は、静的メソッドではなく、EventLog オブジェクトを作成し、動的メゾットを使います。
System.Diagnostics.EventLog evtlog = new System.Diagnostics.EventLog(logName, machineName, source);
evtlog.WriteEntry(message, System.Diagnostics.EventLogEntryType.Error, eventId, category, rowData);
サンプルコード(ローカルPCにイベントログを書き込む)
using System;
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string source = "Sample";
string logName = "Application";
string message = "イベントのメッセージ";
int eventId = 1234;
short category = 123;
byte[] rowData = System.Text.Encoding.Unicode.GetBytes("ABCDEFGH");
if (!System.Diagnostics.EventLog.SourceExists(source))
{
System.Diagnostics.EventSourceCreationData data =
new System.Diagnostics.EventSourceCreationData(source, logName);
System.Diagnostics.EventLog.CreateEventSource(data);
}
System.Diagnostics.EventLog.WriteEntry(source, message, System.Diagnostics.EventLogEntryType.Error, eventId, category, rowData);
}
}
}
サンプルコード(リモートコンピュータにイベントログを書き込む)
using System;
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string source = "Sample";
string logName = "Application";
string message = "イベントのメッセージ";
int eventId = 1234;
short category = 123;
byte[] rowData = System.Text.Encoding.Unicode.GetBytes("ABCDEFGH");
string machineName = "コンピュータ名";
if (!System.Diagnostics.EventLog.SourceExists(source, machineName))
{
System.Diagnostics.EventSourceCreationData data =
new System.Diagnostics.EventSourceCreationData(source, logName);
data.MachineName = machineName;
System.Diagnostics.EventLog.CreateEventSource(data);
}
System.Diagnostics.EventLog evtlog =
new System.Diagnostics.EventLog(logName, machineName, source);
evtlog.WriteEntry(message, System.Diagnostics.EventLogEntryType.Error, eventId, category, rowData);
}
}
}
実行結果(Vista)
Windows XP(Windows Server 2003)以降ならば、「Eventcreate」コマンドでイベントログを書き込むことが可能です。「Eventcreate /?」で詳しい説明が表示されるので、ご確認ください。