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

Traductions disponibles Traductions disponibles
Numéro d'article: 815314 - Voir les produits auxquels s'applique cet article
Pour une version de Microsoft Visual Basic .NET de cet article, voir 814564.
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article étape par étape explique comment accéder à et personnaliser des journaux d'événements Windows à l'aide de Microsoft .NET Framework. Avec la classe de journal des événements vous pouvez interagir avec les journaux d'événements Windows. Via la classe de journal des événements que vous pouvez lire dans les journaux existants, écrire 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 des journaux. L'article explique également comment créer de nouveaux journaux lors de la création d'une source d'événement.

Configuration requise

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

Trouver les journaux existants sur un ordinateur


Vous trouverez les journaux existants sur un ordinateur en utilisant la méthode partagée GetEventLogs de la classe journal des événements . La méthode GetEventLogs recherche tous les journaux des événements sur l'ordinateur local et crée un tableau d'objets de journal qui contient la liste. L'exemple suivant récupère une liste des journaux sur l'ordinateur local, puis affiche 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 journaux locaux et à distance système

Lire journaux

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

Écriture des journaux

Pour écrire un journal des événements, utilisez la méthode WriteEntry de la classe journal des événements . Pour écrire le journal des événements avec succès, votre application doit utiliser accès en écriture au journal qu'il essaie d'écrire dans. Pour plus d'informations sur les autorisations que vous devez posséder pour lire et écrire dans un event log, reportez-vous au adresse site Web de Microsoft à l'adresse suivante.
Sécurité ramification de 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 de composant du journal des événements avant d'écrire les entrées dans un journal. Lorsque votre composant écrit une entrée, le système vérifie automatiquement pour déterminer si la source que vous avez spécifié est enregistrée avec le journal des événements que le composant écriture sur et appelle ensuite CreateEventSource (si CreateEventSource doit être appelée). //See
  
//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();   
EventLog.CreateEventSource (« MySystemSource », "système", System.Environment.MachineName); journal pcCount = nouveau journal (« système », System.Environment.MachineName, « MySystemSource »); / * écriture sur le journal système, de la manière similaire vous pouvez écrire à autre * journaux que vous disposez des autorisations appropriées écrire dans * / ev.WriteEntry("Warning is written to system Log", EventLogEntryType.Warning, 10001) ; MessageBox.Show("Warning is written to System Log") ; ev.Close() ;

Effacer 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 écritures existantes et autoriser le journal pour démarrer les événements de l'enregistrement à nouveau. Appelez la méthode Clear sur l'instance du composant journal des événements.

note Pour effacer des entrées du journal des événements, vous devez disposer autorisations d'administrateur sur l'ordinateur où le journal 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(); 
Journal des événements pcCount = nouveau journal (« sécurité », System.Environment.MachineName) ev.Clear() ev.Close() ;

Créer et supprimer des journaux personnalisé

Créer le journal personnalisé

Vous pouvez utiliser la méthode CreateEventSource pour créer votre propre gestionnaire d'événements personnalisés. 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 déjà existe et appelez ensuite la CreateEventSource . Si vous essayez de créer un journal des événements qui existe déjà, 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"); 
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 journal des événements . Plusieurs sources peut écrire dans un journal des événements. Par conséquent, avant de supprimer un journal personnalisé, assurez-vous qu'il n'y a aucuns les autres sources écrire 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 événements des notifications

Vous pouvez recevoir la notification d'événement lorsqu'une entrée est écrite dans un journal particulier. Pour ce faire, implémenter le gestionnaire d'événements EntryWritten pour l'instance du journal des événements . De même, attribuez EnableRaisingEvents à cette propriété a la valeur true .

note Vous pouvez uniquement recevoir des notifications d'événement lorsque les entrées sont écrites sur l'ordinateur local. Vous ne pouvez pas recevoir des notifications pour les écritures sont écrits sur les ordinateurs distants.

Exécuter le code liste

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 Visual Studio .NET ou Visual Studio 2005, créez une nouveau Visual C# .NET ou application Windows de Visual C# 2005 projet. Par défaut, Form1.vb est créé.
  2. Remplacez le code de Form1.vb par le code qui est répertorié dans la section « complète code liste » de cet article.
  3. Dans le menu Déboguer , cliquez sur Démarrer pour exécuter l'application.
  4. Effectuer diverses actions sur le formulaire.
  5. Dans le menu Affichage , cliquez sur Server Explorer pour vérifier les résultats.
  6. Développez serveurs , puis puis développez votre nom d'ordinateur .
  7. Sous le nom de l'ordinateur, développez journaux des événements .

    note Le n?ud serveurs de l'Explorateur de serveurs n'est pas disponible dans l'éducation édition de Visual C# .NET. Dans ce cas, vous pouvez utiliser l'Observateur d'événements Windows pour afficher les résultats de votre application.
  8. Consultez l'Explorateur de serveurs pour vérifier que toutes les tâches sont effectuées correctement.

Références

Pour plus d'informations, reportez-vous au site de Web Microsoft suivant :
Classe de journal des événements
http://msdn2.microsoft.com/en-us/library/system.diagnostics.eventlog(vs.71).aspx

Propriétés

Numéro d'article: 815314 - Dernière mise à jour: mercredi 14 novembre 2007 - Version: 2.6
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual C# .NET 2002 Initiation
  • Microsoft Visual C# .NET 2003 Initiation
  • Microsoft Visual C# 2005 Express Edition
Mots-clés : 
kbmt kbeventservice kbnetwork kbmanaged kbprogramming kbhowtomaster kbeventlog kbhowto KB815314 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 815314
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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