Vous êtes actuellement hors ligne, en attente de reconnexion à Internet.

Comment faire pour gérer les journaux des événements à l'aide de Visual C# .NET ou Visual C# 2005

IMPORTANT : Cet article est issu d'une traduction automatique réalisée par un logiciel Microsoft et non par un traducteur professionnel. Cette traduction automatique a pu aussi être révisée par la communauté Microsoft grâce à la technologie Community Translation Framework (CTF). Pour en savoir plus sur cette technologie, veuillez consulter la page http://support.microsoft.com/gp/machine-translation-corrections/fr. Microsoft vous propose en effet des articles traduits par des professionnels, des articles issus de traductions automatiques et des articles issus de traductions automatiques révisées par la communauté Microsoft, de manière à ce que vous ayez accès à tous les articles de notre Base de connaissances dans votre langue. Il est important de noter que les articles issus de la traduction automatique, y compris ceux révisés par la communauté Microsoft, peuvent contenir des erreurs de vocabulaire, de syntaxe ou de grammaire. Microsoft ne pourra être tenu responsable des imprécisions, erreurs, ainsi que de tout dommage résultant d’une traduction incorrecte du contenu ou de son utilisation par les clients.

815314
Pour obtenir une version Microsoft Visual Basic .NET de cet article, reportez-vous à la section. 814564.
Résumé
Cet article étape par étape décrit comment afficher et personnaliser les journaux des événements Windows en utilisant le Microsoft.NET Framework. Avec la classe EventLog vous pouvez interagir avec les journaux des événements Windows. À l'aide de la classe EventLog vous pouvez lire les journaux existants, écrire des entrées dans le journal des événements, créer ou supprimer des sources d'événements, supprimer des journaux et répondre aux entrées de journal. L'article décrit également comment créer de nouveaux journaux lors de la création d'une source d'événements.

Configuration requise

La liste suivante met en évidence les matériel, logiciel et infrastructure réseau recommandés ainsi que les service packs qui sont requis :
  • Le Microsoft.NET Framework
  • Microsoft Visual C# .NET ou Microsoft Visual C# 2005.
Cet article suppose que vous maîtrisez les sujets suivants :
  • Microsoft Visual C# .NET ou Microsoft Visual C# 2005 syntaxe
  • Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005 environnement
  • Gestion des erreurs dans le.NET Framework

Rechercher les journaux existants sur un ordinateur


Vous pouvez trouver les journaux existants sur un ordinateur à l'aide de la méthode partagée GetEventLogs de la classe EventLog . La méthode GetEventLogs recherche tous les journaux des événements sur l'ordinateur local et crée un tableau d'objets EventLog qui contiennent la liste. L'exemple suivant récupère une liste de journaux sur l'ordinateur local et affiche ensuite le nom du journal dans une fenêtre de console.
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);

Lire et écrire des journaux dans le système Local et à distance

Lire les journaux

Pour lire un journal des événements, utilisez les entrées de propriétés de la classe EventLog . La classe EventLogEntries , propriété est une collection de toutes les entrées dans le journal des événements. Vous pouvez parcourir cette collection et lire toutes les entrées dans le journal spécifié. Le code suivant montre comment effectuer cette opération :
      //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();

Écrire des journaux

Pour écrire un journal des événements, utilisez la méthode WriteEntry de la classe EventLog . Pour écrire le journal d'événements correctement, votre application doit avoir accès en écriture pour qu'elle tentait d'écrire dans le journal. Pour plus d'informations sur les autorisations dont vous devez disposer pour lire et écrire dans un journal des événements, visitez le site Web de Microsoft à l'adresse suivante.
Ramification de sécurité des journaux des événements
http://msdn2.Microsoft.com/en-us/library/4xz6w79h (vs.71).aspx
Vous devez définir la propriété source sur votre instance du composant EventLog avant de pouvoir écrire des entrées dans un journal. Lorsque votre composant écrit une entrée, le système vérifie automatiquement pour voir si la source que vous avez spécifiée est inscrite dans le journal des événements que le composant écrit et appelle ensuite la méthode CreateEventSource (si CreateEventSource doit être appelé).
  //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();   

Effacer les journaux

Lorsqu'un journal des événements est plein, il arrête l'enregistrement de nouvelles informations d'événement ou commence à remplacer les entrées précédentes. Si l'enregistrement des événements s'arrête, vous pouvez effacer le journal des entrées existantes et autoriser le journal pour commencer l'enregistrement des événements à nouveau. Appelez la méthode Clear sur l'instance du composant EventLog.

Remarque Pour effacer des entrées de journal des événements, vous devez disposer des autorisations d'administrateur sur l'ordinateur où se trouve le journal.
     //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(); 

Créer et supprimer des journaux personnalisés

Créer le journal personnalisé

Vous pouvez utiliser la méthode CreateEventSource pour créer votre propre gestionnaire d'événements personnalisé. Avant de créer un journal des événements, utilisez la méthode SourceExists pour vérifier que la source que vous utilisez ne pas existent déjà et appelez ensuite la CreateEventSource. Si vous essayez de créer un journal des événements existe déjà, une exception System.ArgumentException est levée.
     // 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"); 

Supprimer le journal personnalisé

Pour supprimer le journal des événements, vous pouvez utiliser la méthode Delete de la classe EventLog . Plusieurs sources peuvent écrire dans un journal des événements. Par conséquent, avant de supprimer un journal personnalisé, assurez-vous qu'il n'y a pas d'autres sources qui écrivent dans ce journal.
     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.");}    

Recevoir des Notifications d'événement

Vous pouvez recevoir la notification d'événement lorsqu'une entrée est écrite dans un journal particulier. Pour ce faire, implémentez le Gestionnaire d'événements EntryWritten pour l'instance EventLog. Définissez également EnableRaisingEvents à true.

Remarque Vous pouvez uniquement recevoir des notifications d'événements lorsque les entrées sont écrites sur l'ordinateur local. Vous ne pouvez pas recevoir de notifications pour les entrées qui sont écrites sur des ordinateurs distants.

Listing complet du Code

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

Vérifier les résultats

Pour vérifier les résultats, procédez comme suit :
  1. Dans Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005, créez un projet d'Application Windows Visual C# 2005 ou un nouveau .NET de Visual C#. Par défaut, Form1.vb est créé.
  2. Remplacez le code dans Form1.vb dont le code est listedin, la section « Liste de Code complète » de cet article.
  3. Dans le menu Déboguer , cliquez surDémarrer pour exécuter l'application.
  4. Exécuter diverses actions sur le formulaire.
  5. Dans le menu affichage , cliquez sur ServerExplorer pour vérifier les résultats.
  6. Développez serveurs, puis développez leNom de votre ordinateur.
  7. Sous le nom de l'ordinateur, développez journaux d'événements.

    Remarque Le nœud serveurs de l'Explorateur de serveurs n'est pas disponible dans l'Édition Éducation de Visual C# .NET. Dans ce cas, vous pouvez utilisez l'Observateur d'événements Windows pour afficher les résultats de votre application.
  8. Consultez Explorateur de serveurs pour vérifier que tous les areperformed les tâches correctement.
Références
Pour plus d'informations, visitez le site Web de Microsoft à l'adresse suivante :

Avertissement : Cet article a été traduit de manière automatique

Propriétés

ID d'article : 815314 - Dernière mise à jour : 08/16/2015 22:43:00 - Révision : 3.0

  • Microsoft Visual C# .NET 2002 Initiation
  • Microsoft Visual C# .NET 2003 Initiation
  • Microsoft Visual C# 2005 Express Edition
  • kbeventservice kbnetwork kbmanaged kbprogramming kbhowtomaster kbeventlog kbhowto kbmt KB815314 KbMtfr
Commentaires