Visual C# を使用するイベント ログを管理する方法。NET または Visual C# 2005

文書翻訳 文書翻訳
文書番号: 815314
マイクロソフトの Visual Basic では。このバージョン記事は、 814564.
すべて展開する | すべて折りたたむ

目次

概要

このステップ バイ ステップの資料へのアクセス方法をについて説明し、microsoft Windows のイベント ログをカスタマイズします。NET フレームワークです。で、 イベント ログ クラスは、Windows のイベント ログを操作できます。使用して、 イベント ログ クラスの既存のログからは、読むことができますへのエントリの書き込みにイベント ログは、作成またはイベント ソースを削除、ログ、削除および応答をログに記録するにはエントリです。記事は、作成時に新しいログを作成する方法についても説明します。イベントのソース。

要件

次の一覧は、推奨されるハードウェア、ソフトウェアです、ネットワーク インフラストラクチャ、および service pack は必要です。
  • マイクロソフト。NET Framework
  • Microsoft の Visual C#。NET または Microsoft Visual C# 2005。
この資料で、次のように精通していることを想定しています。トピック:
  • Microsoft の Visual C#。NET または Microsoft Visual C# 2005年構文
  • マイクロソフトの Visual Studio。NET またはマイクロソフトの Visual Studio 2005年環境
  • エラー処理をします。NET Framework

コンピューターに既存のログを検索します。


使用して、コンピューターに既存のログを検索できます、共有メソッド GetEventLogs のは、 イベント ログ クラスです。は、 GetEventLogs メソッドがローカル コンピューター上のすべてのイベント ログを検索し、配列を作成します。 イベント ログ 一覧に含まれるオブジェクト。次の使用例を取得します。一覧をローカル コンピューター上のログし、ログ内の名前を表示します。コンソール ウィンドウです。
EventLog[] remoteEventLogs; 
// Gets logs on the local computer, gives remote computer name to get the logs on the remote computer.
remoteEventLogs = EventLog.GetEventLogs(System.Environment.MachineName);
Console.WriteLine("Number of logs on computer: " + remoteEventLogs.Length);

for ( int i=0; i<remoteEventLogs.Length; i++ )
   Console.WriteLine("Log: " + remoteEventLogs[i].Log);

読み取りし、書き込みログローカルおよびリモートのシステム

ログを読み取り

イベント ログを参照するを使用して、 エントリ プロパティを イベント ログ クラスです。は、 イベント ログ クラス エントリ プロパティは、イベント ログ内のすべての項目のコレクションです。、このコレクションを反復処理したり、指定したすべてのエントリを読み取るログです。これを行う方法の例を次に示します。
      
//logType can be Application, Security, System or any other Custom Log.
string logType = "Application";
			
EventLog ev = new EventLog(logType, System.Environment.MachineName);
int LastLogToShow = ev.Entries.Count;
if ( LastLogToShow <= 0 )
Console.WriteLine("No Event Logs in the Log :" + logType);

// Read the last 2 records in the specified log. 
int i;
for ( i = ev.Entries.Count - 1; i>= LastLogToShow - 2; i--)
{
	EventLogEntry CurrentEntry = ev.Entries[i];
	Console.WriteLine("Event ID : " + CurrentEntry.EventID);
	Console.WriteLine("Entry Type : " + CurrentEntry.EntryType.ToString());
	Console.WriteLine("Message :  " + CurrentEntry.Message + "\n");
}	
ev.Close();

ログを作成します。

イベント ログを作成するを使用して、 WriteEntry メソッドは、 イベント ログ クラスです。イベント ログを正常に書き込むには、アプリケーションする必要があります。書き込みしようとしている、ログへの書き込みアクセスがあります。詳細については読み取りおよび書き込み必要なアクセス許可の詳細については、イベント ログに、次のマイクロソフト Web サイトを参照してください。
セキュリティイベント ログの ramification
.aspx の http://msdn2.microsoft.com/en-us/library/4xz6w79h (vs.71)
Source プロパティを設定する必要があります、 イベント ログ コンポーネントのインスタンスをログにエントリを書き込むことができます前にします。時コンポーネントのエントリを書き込み、システムに自動的にかどうかを確認、イベント ログに、指定したソースが登録されて、コンポーネント書き込みを行うと、呼び出されます。 CreateEventSource (if CreateEventSource 呼び出す必要があります)。
  
//See if the source exists. 
if ( ! ( EventLog.SourceExists("MySystemSource", System.Environment.MachineName)))
EventLog.CreateEventSource("MySystemSource", "System", System.Environment.MachineName);
        
EventLog ev = new EventLog("System", System.Environment.MachineName, "MySystemSource");
/* Writing to system log, in the similar way you can write to other 
 * logs that you have appropriate permissions to write to
 */
ev.WriteEntry("Warning is written to system Log", EventLogEntryType.Warning, 10001);
MessageBox.Show("Warning is written to System Log");
ev.Close();   

クリアログ

イベント ログがいっぱいになると、新しいイベントの記録を停止します。情報、または、古いエントリが上書きされます。イベントの記録を停止する場合は、既存のエントリのログをオフに、録画を開始するのには、ログを許可します。イベントが再び。呼び出して、 クリア イベント ログ コンポーネントのインスタンスのメソッドです。

メモ イベント ログのエントリをクリアするのには、管理者必要があります。ログには、コンピューター上のアクセス許可。
     
//Create an EventLog instance and pass log name and MachineName where the log resides.
EventLog ev = new EventLog("Security", System.Environment.MachineName);
ev.Clear();
ev.Close(); 

作成および削除カスタム ログ

カスタム ログを作成します。

使用できます、 CreateEventSource 独自のカスタム イベント ハンドラーを作成する方法です。作成する前にイベント ログを使用して、 SourceExists 使用しているソースでは使用できませんを確認する方法既にが存在し、呼び出しが CreateEventSource.既に存在するイベント ログを作成しようとした場合、 System.ArgumentException スローされます。
     
// Create the source, if it does not already exist.
if (! (EventLog.SourceExists("MyOldSource", System.Environment.MachineName)))
		EventLog.CreateEventSource("MyOldSource", "MyNewLog", System.Environment.MachineName);
Console.WriteLine("CreatingEventSource"); 

カスタム ログを削除します。

イベント ログを削除するのには、使用できます、 削除 メソッドは、 イベント ログ クラスです。2 つ以上のソース、イベント ログへの書き込みがあります。そのため、カスタム ログを削除する前に、もう一方はソースなしいることかどうかを確認します。そのログに書き込みます。
     
string logName = "MyNewLog";
if ( EventLog.SourceExists("MyOldSource", System.Environment.MachineName))
{
	logName = EventLog.LogNameFromSourceName("MyOldSource", System.Environment.MachineName);
	EventLog.DeleteEventSource("MyOldSource", System.Environment.MachineName);
	EventLog.Delete(logName, System.Environment.MachineName);
	Console.WriteLine(logName + " deleted.");
}    

イベントを受信します。通知

エントリが書き込まれるときに、イベントの通知を受け取ることができます、特定のログします。これを行うには、実装、 EntryWritten 2 つのイベント ハンドラーは、 イベント ログ.また、設定します。 EnableRaisingEvents するには true.

メモ エントリが書き込まれるときだけイベント通知を受け取ることができます。ローカル コンピューターにします。あるエントリに通知することはできません。リモート コンピューター上で作成します。

完全なコード一覧

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Security;
using System.IO;
using System.Diagnostics;

namespace WindowsApplication1
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form
	{
		private System.Diagnostics.EventLog eventLog1;
		private System.Windows.Forms.Button btnListLog;
		private System.Windows.Forms.Button btnReadLog;
		private System.Windows.Forms.Button btnWriteLog;
		private System.Windows.Forms.Button btnClearLog;
		private System.Windows.Forms.Button btnCreateLog;
		private System.Windows.Forms.Button btnDeleteLog;
		private System.Windows.Forms.Button btnRecNotice;
		
		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		public Form1()
		{
			//
			// Required for Windows Form Designer support.
			//
			InitializeComponent();

			//
			// TODO: Add any constructor code after InitializeComponent call.
			//
		}

		/// <summary>
		/// Clean up any resources that are being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			this.eventLog1 = new System.Diagnostics.EventLog();
			this.btnListLog = new System.Windows.Forms.Button();
			this.btnReadLog = new System.Windows.Forms.Button();
			this.btnWriteLog = new System.Windows.Forms.Button();
			this.btnClearLog = new System.Windows.Forms.Button();
			this.btnCreateLog = new System.Windows.Forms.Button();
			this.btnDeleteLog = new System.Windows.Forms.Button();
			this.btnRecNotice = new System.Windows.Forms.Button();
			((System.ComponentModel.ISupportInitialize)(this.eventLog1)).BeginInit();
			this.SuspendLayout();
			// 
			// eventLog1
			// 
			this.eventLog1.MachineName = System.Environment.MachineName;
			this.eventLog1.SynchronizingObject = this;
			this.eventLog1.EntryWritten += new System.Diagnostics.EntryWrittenEventHandler(this.eventLog1_EntryWritten);

			// 
			// btnListLog
			// 
			this.btnListLog.Location = new System.Drawing.Point(32, 16);
			this.btnListLog.Name = "btnListLog";
			this.btnListLog.Size = new System.Drawing.Size(152, 23);
			this.btnListLog.TabIndex = 0;
			this.btnListLog.Text = "List Event Logs";
			this.btnListLog.Click += new System.EventHandler(this.btnListLog_Click);
			// 
			// btnReadLog
			// 
			this.btnReadLog.Location = new System.Drawing.Point(32, 46);
			this.btnReadLog.Name = "btnReadLog";
			this.btnReadLog.Size = new System.Drawing.Size(152, 23);
			this.btnReadLog.TabIndex = 1;
			this.btnReadLog.Text = "Read Event Logs";
			this.btnReadLog.Click += new System.EventHandler(this.btnReadLog_Click);
			// 
			// btnWriteLog
			// 
			this.btnWriteLog.Location = new System.Drawing.Point(32, 77);
			this.btnWriteLog.Name = "btnWriteLog";
			this.btnWriteLog.Size = new System.Drawing.Size(152, 23);
			this.btnWriteLog.TabIndex = 2;
			this.btnWriteLog.Text = "Write Event Logs";
			this.btnWriteLog.Click += new System.EventHandler(this.btnWriteLog_Click);
	
 		// 
			// btnClearLog
			// 
			this.btnClearLog.Location = new System.Drawing.Point(32, 106);
			this.btnClearLog.Name = "btnClearLog";
			this.btnClearLog.Size = new System.Drawing.Size(152, 23);
			this.btnClearLog.TabIndex = 3;
			this.btnClearLog.Text = "Clear Logs";
			this.btnClearLog.Click += new System.EventHandler(this.btnClearLog_Click);

			// 
			// btnCreateLog
			// 
			this.btnCreateLog.Location = new System.Drawing.Point(32, 137);
			this.btnCreateLog.Name = "btnCreateLog";
			this.btnCreateLog.Size = new System.Drawing.Size(152, 23);
			this.btnCreateLog.TabIndex = 4;
			this.btnCreateLog.Text = "Create Custom Logs";
			this.btnCreateLog.Click += new System.EventHandler(this.btnCreateLog_Click);

			// 
			// btnDeleteLog
			// 
			this.btnDeleteLog.Location = new System.Drawing.Point(32, 168);
			this.btnDeleteLog.Name = "btnDeleteLog";
			this.btnDeleteLog.Size = new System.Drawing.Size(152, 23);
			this.btnDeleteLog.TabIndex = 5;
			this.btnDeleteLog.Text = "Delete Custom Logs";
			this.btnDeleteLog.Click += new System.EventHandler(this.btnDeleteLog_Click);
			// 
			// btnRecNotice
			// 
			this.btnRecNotice.Location = new System.Drawing.Point(32, 199);
			this.btnRecNotice.Name = "btnRecNotice";
			this.btnRecNotice.Size = new System.Drawing.Size(152, 23);
			this.btnRecNotice.TabIndex = 6;
			this.btnRecNotice.Text = "Receive Event Notifications";
			this.btnRecNotice.Click += new System.EventHandler(this.btnRecNotice_Click);

			// 
			// Form1
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(216, 237);
			this.Controls.Add(this.btnRecNotice);
			this.Controls.Add(this.btnDeleteLog);
			this.Controls.Add(this.btnCreateLog);
			this.Controls.Add(this.btnClearLog);
			this.Controls.Add(this.btnWriteLog);
			this.Controls.Add(this.btnReadLog);
			this.Controls.Add(this.btnListLog);
			this.Name = "Form1";
			this.Text = "Form1";
			((System.ComponentModel.ISupportInitialize)(this.eventLog1)).EndInit();
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

		private void btnListLog_Click(object sender, System.EventArgs e)
		{
			EventLog[] remoteEventLogs; 
			// Gets logs on the local computer, gives remote computer name to get the logs on the remote computer.
			remoteEventLogs = EventLog.GetEventLogs(System.Environment.MachineName);

			Console.WriteLine("Number of logs on computer: " + remoteEventLogs.Length);

			for ( int i=0; i<remoteEventLogs.Length; i++ )
				Console.WriteLine("Log: " + remoteEventLogs[i].Log);
		}

		private void btnReadLog_Click(object sender, System.EventArgs e)
		{

			//logType can be Application, Security, System or any other Custom Log.
			string logType = "Application";
			
			/* In this case the EventLog constructor is passed a string variable for the log name and 
			 * second argument mention the computer name that you want to read the logs from,
			 * and that you have appropriate permissions to*/

			EventLog ev = new EventLog(logType, System.Environment.MachineName);

			int LastLogToShow = ev.Entries.Count;
			if ( LastLogToShow <= 0 )
				Console.WriteLine("No Event Logs in the Log :" + logType);
			// Read the last 2 record in the specified log. 
			int i;
			for ( i = ev.Entries.Count - 1; i>= LastLogToShow - 2; i--)
			{
				EventLogEntry CurrentEntry = ev.Entries[i];
				Console.WriteLine("Event ID : " + CurrentEntry.EventID);
				Console.WriteLine("Entry Type : " + CurrentEntry.EntryType.ToString());
				Console.WriteLine("Message :  " + CurrentEntry.Message + "\n");
			}	

			ev.Close();

			/* Similarly you can loop through all the entries in the log using
			 * the entries collection as shown in the following commented code.
			 * For Each entry In ev.Entries */    
		}

		private void btnWriteLog_Click(object sender, System.EventArgs e)
		{
			/* When writing to an event log, pass the computer name where 
			 * the log resides.  Here the MachineName Property of the Environment class 
			 * is used to determine the name of the local computer.  Assuming that you have 
			 * the appropriate permissions, it is also easy to write to event logs on 
			 * other computers.*/

			//See if the Source exists. 
			if ( ! ( EventLog.SourceExists("MySystemSource", System.Environment.MachineName)))
				EventLog.CreateEventSource("MySystemSource", "System", System.Environment.MachineName);
        
					EventLog ev = new EventLog("System", System.Environment.MachineName, "MySystemSource");
			/* Writing to system log, in the similar way you can write to other 
			 * logs that you have appropriate permissions to write to
			 */
			ev.WriteEntry("Warning is written to system Log", EventLogEntryType.Warning, 10001);
			MessageBox.Show("Warning is written to System Log");
			ev.Close();
		}

		private void btnClearLog_Click(object sender, System.EventArgs e)
		{
			//Create an EventLog instance, and pass log name and MachineName where the log resides.
			EventLog ev = new EventLog("Security", System.Environment.MachineName);
			ev.Clear();
			ev.Close();
		}

		private void btnCreateLog_Click(object sender, System.EventArgs e)
		{
			// Create the source, if it does not already exist.
			if (! (EventLog.SourceExists("MyOldSource", System.Environment.MachineName)))
				// Creating a new log
				EventLog.CreateEventSource("MyOldSource", "MyNewLog", System.Environment.MachineName);
			Console.WriteLine("CreatingEventSource");
		}

		private void btnDeleteLog_Click(object sender, System.EventArgs e)
		{
			string logName = "MyNewLog";

			if ( EventLog.SourceExists("MyOldSource", System.Environment.MachineName))
			{
				logName = EventLog.LogNameFromSourceName("MyOldSource", System.Environment.MachineName);
				EventLog.DeleteEventSource("MyOldSource", System.Environment.MachineName);
				EventLog.Delete(logName, System.Environment.MachineName);
				Console.WriteLine(logName + " deleted.");
			}            
		}

		private void btnRecNotice_Click(object sender, System.EventArgs e)
		{
			// Create the source, if it does not already exist.
			if (EventLog.SourceExists("MySource", System.Environment.MachineName) == false)
			{
				EventLog.CreateEventSource("MySource", "Application", System.Environment.MachineName);
				Console.WriteLine("CreatingEventSource");
			}

			eventLog1.Log = "Application";
			//Enable EnableRaisingEvents to true
			eventLog1.EnableRaisingEvents = true;
			EventLog.WriteEntry("MySource", "EntryWritten event is fired", EventLogEntryType.Information);
		}

		private void eventLog1_EntryWritten(object sender, System.Diagnostics.EntryWrittenEventArgs e)
		{
			if (e.Entry.Source  == "MySource")
				Console.WriteLine("Entry written by my app. Message: " + e.Entry.Message);
		}
	}
}

結果を確認してください。

結果を確認するには、次の手順を実行します。
  1. マイクロソフトの Visual Studio で。NET または Microsoft Visual Studio 2005 で、新しい Visual C# 作成.NET または Visual C# 2005 Windows アプリケーションのプロジェクトです。既定では、Form1.vb が作成されます。
  2. 表示されているコードを form1.vb コードを交換してください。この資料の「完全なコード リスト"] セクションでします。
  3. で、 デバッグ メニューをクリックして開始 アプリケーションを実行します。
  4. フォーム上のさまざまな操作を実行します。
  5. で、 ビュー メニューをクリックして サーバーエクスプ ローラー 結果を確認するには。
  6. 展開 サーバー、し展開コンピューター名.
  7. コンピューター名の下の展開します。 イベントログ.

    メモ は、 サーバー サーバー エクスプ ローラーのノードではありません。使用可能で、アカデミック版の Visual C#。NET。このような場合に、使用できます。Windows のイベント、アプリケーションの結果を表示するビューアー。
  8. サーバー エクスプ ローラーがすべてのタスクがあることを確認するを確認します。正常に実行します。

関連情報

詳細については、次のマイクロソフト Web を参照してください。サイト:
EventLog クラス
.aspx の http://msdn2.microsoft.com/en-us/library/system.diagnostics.eventlog (vs.71)

プロパティ

文書番号: 815314 - 最終更新日: 2011年7月28日 - リビジョン: 4.0
キーワード:?
kbhowto kbhowtomaster kbeventservice kbnetwork kbprogramming kbeventlog kbmanaged kbmt KB815314 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:815314
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com