C#でイベントログを取得します。
2つの取得方法を記載していますが、共にロカールだけでなく、コンピュータ名を指定してリモートのイベントログを取得することができます。
1.取得するログが決まっている場合
取得するログが決まっている場合は、まずはログにインスタンスを関連付けます。
System.Diagnostics.EventLog log =
new System.Diagnostics.EventLog("Application");
上記のログ名(Application)を「Security」や「System」に変更したり、コンピュータ名を追加で指定することも可能です。
System.Diagnostics.EventLog log =
new System.Diagnostics.EventLog("Security", "コンピュータ名");
後は、関連付けた EventLog を使用してログを取得します。
※下記コードは実際に実行すると件数を制限していないため、かなり時間がかかるのでご注意ください。
for (int i = 0; i < log.Entries.Count; i++)
{
//イベントを発生させたアプリケーションを取得
Console.WriteLine("Source :{0}" , log.Entries[i].Source);
Console.WriteLine("Message:{0}" , log.Entries[i].Message);
}
取得できる値などは、下記のサイトをご覧ください。
EventLog メンバ
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.eventlog_members%28VS.80%29.aspx
サンプルコード
using System;
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
System.Diagnostics.EventLog log =
new System.Diagnostics.EventLog("Application");
int max = Math.Min(5, log.Entries.Count);
for (int i = 0; i < log.Entries.Count; i++)
{
textBox1.Text += "Source : " + log.Entries[i].Source + "\r\n";
textBox1.Text += "Message: " + log.Entries[i].Message + "\r\n";
}
}
}
}
2.すべてのイベント ログを取得する場合
すべてのイベント ログを取得する場合、EventLog の GetEventLogsメゾットを使用します。
まずは、EventLog の配列を取得します。
System.Diagnostics.EventLog[] logs =
System.Diagnostics.EventLog.GetEventLogs();
EventLogを取得するコンピュータ名を指定することも可能です。
System.Diagnostics.EventLog[] logs =
System.Diagnostics.EventLog.GetEventLogs("コンピュータ名");
後は EventLog の配列からをEventLogを取り出して、「1.取得するログが決まっている場合」と同じようにログを取得します。
※下記コードは実際に実行すると件数を制限していないため、かなり時間がかかるのでご注意ください。
foreach (System.Diagnostics.EventLog log in logs)
{
textBox1.Text += "LogName: " + log.Log + "\r\n";
for (int i = 0; i < log.Entries.Count; i++)
{
textBox1.Text += "Source: " + log.Entries[i].Source + "\r\n";
textBox1.Text += "Entry : " + log.Entries[i].Message + "\r\n";
}
}
サンプルコード
using System;
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
System.Diagnostics.EventLog[] logs =
System.Diagnostics.EventLog.GetEventLogs();
foreach (System.Diagnostics.EventLog log in logs)
{
textBox1.Text += "LogName: " + log.Log + "\r\n";
int max = Math.Min(10, log.Entries.Count);
for (int i = 0; i < max; i++)
{
textBox1.Text += "Source: " + log.Entries[i].Source + "\r\n";
textBox1.Text += "Entry : " + log.Entries[i].Message + "\r\n";
}
}
}
}
}
Vistaでユーザーアカウント制御 (UAC)が有効の場合、Windows フォームアプリケーションは「管理者として実行」しないと、例外(「System.Security.SecurityException: 要求されたレジストリ アクセスは許可されていません。」)が発生しますので、可能ならばVSを管理者として実行してください。