วิธีการจัดการแฟ้มบันทึกเหตุการณ์ที่โดยใช้ Visual .NET c# หรือ Visual 2005 c#

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 815314 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
สำหรับรุ่น Microsoft Visual Basic .NET ของบทความนี้ ดู814564.
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความที่มีการทีละขั้นตอนนี้อธิบายวิธีการเข้าถึง และการกำหนดเองโดยใช้กรอบงาน Microsoft .NET บันทึกเหตุการณ์ของ Windows ด้วยการEventLogระดับชั้นที่คุณสามารถทำงานกับแฟ้มบันทึกเหตุการณ์ของ Windows ใช้แบบEventLogระดับชั้นที่คุณสามารถอ่านจากแฟ้มบันทึกที่มีอยู่ เขียนรายการลงในบันทึกของเหตุการณ์ สร้าง หรือลบแหล่งที่มาของเหตุการณ์ ลบการล็อก และตอบสนองต่อการบันทึกรายการ บทความอธิบายวิธีการสร้างแฟ้มบันทึกใหม่ขณะสร้างแหล่งมีเหตุการณ์

ความต้องการ

รายการต่อไปนี้แสดงฮาร์ดแวร์ที่แนะนำ ซอฟต์แวร์ โครงสร้างพื้นฐานของเครือข่าย และ service pack ที่จำเป็นต้องใช้:
  • Microsoft .NET Framework
  • Microsoft Visual c# .NET หรือ Microsoft Visual c# 2005
บทความนี้อนุมานว่า คุณไม่คุ้นเคยกับหัวข้อต่อไปนี้:
  • Microsoft Visual c# .NET หรือ Microsoft Visual c# 2005 ไวยากรณ์
  • Microsoft Visual Studio .NET หรือสภาพแวดล้อมของ Microsoft Visual Studio 2005
  • ข้อผิดพลาดในการจัดการใน.NET Framework

การค้นหาแฟ้มบันทึกที่มีอยู่บนคอมพิวเตอร์


คุณสามารถค้นหาแฟ้มบันทึกที่มีอยู่บนคอมพิวเตอร์ โดยใช้วิธีการใช้ร่วมกันGetEventLogsของEventLogคลาสที่ กระบวนการGetEventLogsวิธีค้นหาล็อกเหตุการณ์ทั้งหมดของเครื่องคอมพิวเตอร์ และสร้างอาร์เรย์ของEventLogวัตถุที่ประกอบด้วยรายการ ตัวอย่างต่อไปนี้ดึงข้อมูลรายชื่อของแฟ้มบันทึกของเครื่องคอมพิวเตอร์ และแสดงชื่อของแฟ้มบันทึกในหน้าต่างคอนโซล
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);

อ่าน และเขียนแฟ้มบันทึกการภายในเครื่องและรีโมทระบบ

อ่านบันทึกเหตุการณ์

เมื่อต้องการอ่านแฟ้มบันทึกเหตุการณ์ ใช้รายการคุณสมบัติของEventLogคลาสที่ กระบวนการEventLogคลาสรายการคุณสมบัติคือ ชุดของรายการทั้งหมดที่อยู่ในแฟ้มบันทึกเหตุการณ์ คุณสามารถ iterate ผ่านคอลเลกชันนี้ และอ่านรายการทั้งหมดที่อยู่ในแฟ้มบันทึกที่ระบุ รหัสต่อไปนี้อธิบายวิธีการดังนี้:
      
//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วิธีการนี้EventLogคลาสที่ เขียนแฟ้มบันทึกเหตุการณ์เสร็จเรียบร้อยแล้ว โปรแกรมประยุกต์ต้องมีการเข้าถึงการเขียนไปยังล็อกที่พยายามเขียนไปยัง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิทธิที่คุณต้องมีเพื่ออ่าน และเขียนลงในแฟ้มบันทึกเหตุการณ์ ไปที่เว็บไซต์ต่อไปนี้ของ Microsoft
รักษาความปลอดภัย Ramification ของแฟ้มบันทึกเหตุการณ์
.aspx http://msdn2.microsoft.com/en-us/library/4xz6w79h (vs.71)
คุณต้องตั้งค่าคุณสมบัติแหล่งที่มาในของคุณEventLogอินสแตนซ์คอมโพเนนต์ก่อนที่คุณสามารถเขียนรายการบันทึก ตรวจเมื่อคอมโพเนนต์ของคุณเขียนรายการ ระบบโดยอัตโนมัติสอบเพื่อดูว่า แหล่งที่มาที่คุณระบุได้มีการลงทะเบียนกับแฟ้มบันทึกเหตุการณ์ที่เขียนไปยัง คอมโพเนนต์ และจากนั้น เรียกCreateEventSource(ถ้า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();   

แฟ้มบันทึกที่ชัดเจน

เมื่อแฟ้มบันทึกเหตุการณ์เต็ม จะหยุดการบันทึกข้อมูลเหตุการณ์ใหม่ หรือเริ่มต้นการบันทึกทับรายการก่อนหน้านี้ If event recording stops, you can clear the log of existing entries, and allow the log to start recording events again. เรียกยกเลิกการเลือกmethod on the event log component instance.

หมายเหตุ:To clear event log entries, you must have administrator permissions on the computer where the log is.
     
//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(); 

Create and Delete Custom Logs

Create the Custom Log

คุณสามารถใช้ได้CreateEventSourcemethod to create your own custom event handler. Before you create an event log, use theSourceExistsmethod to verify that the source that you are using does not already exist, and then call theCreateEventSource. If you try to create a event log that already exists,System.ArgumentExceptionis thrown.
     
// 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"); 

Delete the Custom Log

To delete the event log, you can use theลบวิธีการนี้EventLogคลาสที่ More than one source may write to an event log. Therefore, before you delete a custom log, make sure that there are no other sources that are writing to that log.
     
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.");
}    

Receive Event Notifications

You can receive event notification when an entry is written to a particular log. To do this, implement theEntryWrittenevent handler for the instance of theEventLog. Also, setEnableRaisingEventsเมื่อต้องการTrue.

หมายเหตุ:You can only receive event notifications when entries are written on the local computer. You cannot receive notifications for entries that are written on remote computers.

Complete Code Listing

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);
		}
	}
}

Verify the Results

To verify the results, follow these steps:
  1. In Microsoft Visual Studio .NET or in Microsoft Visual Studio 2005, create a new Visual C# .NET or Visual C# 2005 Windows Application project. By default, Form1.vb is created.
  2. Replace the code in Form1.vb with the code that is listed in the "Complete Code Listing" section of this article.
  3. ในการตรวจแก้จุดบกพร่องเมนู คลิกเริ่มการทำงานเมื่อต้องการเรียกใช้โปรแกรมประยุกต์
  4. Perform various actions on the form.
  5. ในการมุมมองเมนู คลิกServer Explorerto verify the results.
  6. ขยายเซิร์ฟเวอร์แล้ว ขยายYour Computer Name.
  7. Under the computer name, expandEvent Logs.

    หมายเหตุ:กระบวนการเซิร์ฟเวอร์node of Server Explorer is not available in the Academic Edition of Visual C# .NET. In such cases, you can use the Windows Event Viewer to view the results of your application.
  8. Check Server Explorer to verify that all the tasks are performed correctly.

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติม โปรดเยี่ยมชมเว็บไซต์ต่อไปนี้ของ Microsoft::
EventLog Class
.aspx http://msdn2.microsoft.com/en-us/library/system.diagnostics.eventlog (vs.71)

คุณสมบัติ

หมายเลขบทความ (Article ID): 815314 - รีวิวครั้งสุดท้าย: 14 มกราคม 2554 - Revision: 3.0
ใช้กับ
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
Keywords: 
kbeventservice kbnetwork kbmanaged kbprogramming kbhowtomaster kbeventlog kbhowto kbmt KB815314 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:815314

ให้ข้อเสนอแนะ

 

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