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を管理者として実行してください。

Add comment




  Country flag

biuquote
  • Comment
  • Preview
Loading