Comment gérer les journaux d'événements à l'aide de Visual Basic .NET ou Visual Basic 2005

Traductions disponibles Traductions disponibles
Numéro d'article: 814564 - Voir les produits auxquels s'applique cet article
Pour une version de Visual C# .NET de cet article, voir 815314.
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. Vous pouvez interagir avec les journaux d'événements Windows en utilisant la classe de journal des événements . Vous pouvez utiliser la classe de journal des événements pour effectuer les opérations suivantes :
  • Lire les journaux existants.
  • Écrire des entrées dans les journaux d'événements.
  • Créer ou supprimer des sources d'événements.
  • Supprimer des journaux.
  • Répondent aux entrées des journaux.
Cet article explique également comment créer de nouveaux journaux pendant que vous créer 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 :
  • Microsoft .NET framework
  • Microsoft Visual Basic .NET ou Microsoft Visual Basic 2005

Cet article suppose que vous êtes familiarisé avec les sujets suivants :
  • Microsoft Visual Basic .NET ou Microsoft Visual Basic 2005 syntaxe
  • Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005 environnement
  • Gestion des erreurs dans .NET Framework

Trouver les journaux existants sur un ordinateur


Vous trouverez les journaux existants sur un ordinateur à l'aide la méthode GetEventLogs partagé de la classe de journal des événements . La méthode GetEventLogs recherche tous les journaux des événements sur l'ordinateur local, puis il crée un tableau d'objets journal des événements qui contient la liste. L'exemple de code suivant récupère une liste des journaux sur l'ordinateur local, puis afficher le nom des journaux dans une fenêtre de console :
      Dim remoteEventLogs() As EventLog

      'Gets logs on the local machine, give remote machine name to get the logs on the remote machine
      remoteEventLogs = EventLog.GetEventLogs(System.Environment.MachineName)

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

      'Display the list of event logs
      Dim log As EventLog
      For Each log In remoteEventLogs
         Console.WriteLine("Log: " & log.Log)
      Next log

Lire et écrire journaux à et à partir de la locale et le système distant


Lire journaux


Pour lire un journal des événements, utilisez la propriété Entries de la classe journal des événements . La propriété Entries de la classe journal des événements est une collection de toutes les entrées dans le journal des événements. L'exemple de code suivant illustre comment effectuer une itération dans cette collection et comment lire toutes les entrées du journal spécifié :
      ' Log type can be Application, Security, System or any other custom log
      ' Select the log type you want to read
      Dim logtype As String = "Application"

      ' In the constructor of the eventlog, pass the log type and the computer name 
      ' from which you want to read the logs 
      Dim evtLog As New EventLog(logtype, System.Environment.MachineName)

      Dim lastlogtoshow As Integer = evtLog.Entries.Count
      If lastlogtoshow <= 0 Then
         Console.WriteLine("There are no event logs in the log : " & logtype)
         Exit Sub
      End If

      ' Read the last record in the specified log 
      Dim currentEntry As EventLogEntry
      Dim i As Integer
      ' Show Last 2 entries. You can similarly write the log to a file.
      For i = evtLog.Entries.Count - 1 To lastlogtoshow - 2 Step -1
         currentEntry = evtLog.Entries(i)
         Console.WriteLine("Event Id is : " & currentEntry.EventID)
         Console.WriteLine("Entry type is : " & currentEntry.EntryType.ToString())
         Console.WriteLine("Message is :  " & currentEntry.Message & vbCrLf)
      Next
      evtLog.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, assurez-vous que votre application a accès en écriture pour le journal qui écrit à. Pour plus d'informations sur les autorisations que vous devez posséder pour lire et écrire dans event logs, 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 de journal des événements avant d'écrire dans un journal des écritures. Lorsque votre composant écrit une entrée, le système vérifie automatiquement que la source que vous avez spécifié est enregistrée dans le journal des événements qui écrit pour le composant. Le système appelle ensuite CreateEventSource si nécessaire. Pour écrire un journal des événements, vous devez transmettre le nom de l'ordinateur où réside le journal. Dans l'exemple de code suivant, la propriété MachineName de la classe d'environnement détermine le nom de l'ordinateur local :
      
  ' Check if the source exists 
      If Not EventLog.SourceExists("MySystemSource", System.Environment.MachineName) Then
         EventLog.CreateEventSource("MySystemSource", "System", System.Environment.MachineName)
      End If

      Dim evtLog As New EventLog("System", System.Environment.MachineName, "MySystemSource")

      'writing to system log, in the similar way you can write to other 
      'logs for which you have appropriate permissions to write
      evtLog.WriteEntry("warning is written to system log", EventLogEntryType.Warning, CInt(10001))
      Console.WriteLine("Log written to the system log.")
      evtLog.Close()
evtLog.Close()

Effacer journaux


Lorsqu'un journal des événements est plein, il arrête l'enregistrement de nouvelles informations d'événement ou qu'il 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 lui permettant de démarrer les événements de l'enregistrement à nouveau. Pour effacer des entrées du journal des événements, vous devez disposer autorisations d'administrateur de l'ordinateur qui réside dans le journal. Appelez la méthode Clear sur l'instance du composant journal des événements .

Le code suivant domonstrates exemple comment faire pour effacer un journal :
      ' Create an EventLog instance and pass log name and MachineName on which the log resides
      Dim evtLog As New EventLog("Security", System.Environment.MachineName)
      evtLog.Clear()
      evtLog.Close()

Créer et supprimer des journaux personnalisé

Créer le journal personnalisé

Utilisez la méthode CreateEventSource pour créer votre propre gestionnaire d'événements personnalisés. Avant de créer le journal des événements, utilisez la méthode SourceExists pour vérifier que la source que sont à l'aide ne pas exister et puis appeler CreateEventSource . Si vous essayez de créer un journal des événements qui existe déjà, une erreur System.ArgumentException se produit.

L'exemple de code suivant montre comment créer un journal personnalisé :
      ' Check if the log already exist
      If Not EventLog.SourceExists("MyOldSource", System.Environment.MachineName) Then
         ' Creating a new log
         EventLog.CreateEventSource("MyOldSource", "MyNewLog", System.Environment.MachineName)
         Console.WriteLine("New event log created successfully.")
      End If
Fin si

Supprimer le journal personnalisé

Utilisez la méthode Delete de la classe de journal des événements pour supprimer le 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'existe d'autres sources aucuns écrire dans ce journal.

L'exemple de code suivant montre comment supprimer un journal personnalisé :
      Dim logName As String = "MyNewLog"

      If EventLog.SourceExists("MyOldSource", System.Environment.MachineName) Then
         logName = EventLog.LogNameFromSourceName("MyOldSource", System.Environment.MachineName)
         EventLog.DeleteEventSource("MyOldSource", System.Environment.MachineName)
         EventLog.Delete(logName, System.Environment.MachineName)

         Console.WriteLine(logName & " deleted.")
      End If

Recevoir des événements des notifications

Vous pouvez recevoir une 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 . En outre, définissez la propriété EnableRaisingEvents sur true .

L'exemple de code suivant illustre comment recevoir les notifications d'événement :
      If Not EventLog1.SourceExists("MySource", System.Environment.MachineName) Then
         EventLog1.CreateEventSource("MySource", "Application", System.Environment.MachineName)
         Console.WriteLine("CreatingEventSource")
      End If

      'Enable EnableRaisingEvents to true
      EventLog1.Log = "Application"
						EventLog1.EnableRaisingEvents = True
      EventLog1.WriteEntry("MySource", "EntryWritten event is fired", EventLogEntryType.Information)
   End Sub
Remarque vous pouvez uniquement recevoir notifications d'événement lorsque entrées sont écrites sur l'ordinateur local. Vous ne pouvez pas recevoir des notifications pour les entrées écrites sur des ordinateurs distants.


Exécuter le code liste

Imports System.Diagnostics
Imports System.Security
Imports System.ComponentModel
Imports System.IO

Public Class Form1
   Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

   Public Sub New()
      MyBase.New()

      'The Windows Form Designer requires this call.
      InitializeComponent()

      'Add any initialization after the InitializeComponent() call

   End Sub

   'Form overrides dispose to clean up the component list.
   Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
      If disposing Then
         If Not (components Is Nothing) Then
            components.Dispose()
         End If
      End If
      MyBase.Dispose(disposing)
   End Sub

   'Required by the Windows Form Designer
   Private components As System.ComponentModel.IContainer

   'NOTE: The Windows Form Designer requires the following procedure
   'It can be modified using the Windows Form Designer.  
   'Do not modify it using the code editor.
   Friend WithEvents EventLog1 As System.Diagnostics.EventLog
   Friend WithEvents btnListLog As System.Windows.Forms.Button
   Friend WithEvents btnReadLog As System.Windows.Forms.Button
   Friend WithEvents btnWriteLog As System.Windows.Forms.Button
   Friend WithEvents btnClearLog As System.Windows.Forms.Button
   Friend WithEvents btnCreateLog As System.Windows.Forms.Button
   Friend WithEvents btnDeleteLog As System.Windows.Forms.Button
   Friend WithEvents btnRecNotice As System.Windows.Forms.Button
   <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
      Me.btnReadLog = New System.Windows.Forms.Button()
      Me.btnWriteLog = New System.Windows.Forms.Button()
      Me.btnClearLog = New System.Windows.Forms.Button()
      Me.btnCreateLog = New System.Windows.Forms.Button()
      Me.btnDeleteLog = New System.Windows.Forms.Button()
      Me.btnRecNotice = New System.Windows.Forms.Button()
      Me.EventLog1 = New System.Diagnostics.EventLog()
      Me.btnListLog = New System.Windows.Forms.Button()
      CType(Me.EventLog1, System.ComponentModel.ISupportInitialize).BeginInit()
      Me.SuspendLayout()
      '
      'btnReadLog
      '
      Me.btnReadLog.Location = New System.Drawing.Point(48, 54)
      Me.btnReadLog.Name = "btnReadLog"
      Me.btnReadLog.Size = New System.Drawing.Size(152, 24)
      Me.btnReadLog.TabIndex = 0
      Me.btnReadLog.Text = "Read Event Logs"
      '
      'btnWriteLog
      '
      Me.btnWriteLog.Location = New System.Drawing.Point(48, 86)
      Me.btnWriteLog.Name = "btnWriteLog"
      Me.btnWriteLog.Size = New System.Drawing.Size(152, 24)
      Me.btnWriteLog.TabIndex = 1
      Me.btnWriteLog.Text = "Write Event Logs"
      '
      'btnClearLog
      '
      Me.btnClearLog.Location = New System.Drawing.Point(48, 118)
      Me.btnClearLog.Name = "btnClearLog"
      Me.btnClearLog.Size = New System.Drawing.Size(152, 24)
      Me.btnClearLog.TabIndex = 2
      Me.btnClearLog.Text = "Clear Logs"
      '
      'btnCreateLog
      '
      Me.btnCreateLog.Location = New System.Drawing.Point(48, 150)
      Me.btnCreateLog.Name = "btnCreateLog"
      Me.btnCreateLog.Size = New System.Drawing.Size(152, 24)
      Me.btnCreateLog.TabIndex = 3
      Me.btnCreateLog.Text = "Create Custom Log"
      '
      'btnDeleteLog
      '
      Me.btnDeleteLog.Location = New System.Drawing.Point(48, 182)
      Me.btnDeleteLog.Name = "btnDeleteLog"
      Me.btnDeleteLog.Size = New System.Drawing.Size(152, 24)
      Me.btnDeleteLog.TabIndex = 4
      Me.btnDeleteLog.Text = "Delete Custom Log"
      '
      'btnRecNotice
      '
      Me.btnRecNotice.Location = New System.Drawing.Point(48, 214)
      Me.btnRecNotice.Name = "btnRecNotice"
      Me.btnRecNotice.Size = New System.Drawing.Size(152, 24)
      Me.btnRecNotice.TabIndex = 5
      Me.btnRecNotice.Text = "Receive Event Notifications"
      '
      'EventLog1
      '
      Me.EventLog1.EnableRaisingEvents = True
      Me.EventLog1.Log = "Application"
      Me.EventLog1.MachineName = System.Environment.MachineName
      Me.EventLog1.SynchronizingObject = Me
      '
      'btnListLog
      '
      Me.btnListLog.Location = New System.Drawing.Point(48, 22)
      Me.btnListLog.Name = "btnListLog"
      Me.btnListLog.Size = New System.Drawing.Size(152, 24)
      Me.btnListLog.TabIndex = 6
      Me.btnListLog.Text = "List Event Logs"
      '
      'Form1
      '
      Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
      Me.ClientSize = New System.Drawing.Size(256, 266)
      Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.btnListLog, Me.btnRecNotice, Me.btnDeleteLog, Me.btnCreateLog, Me.btnClearLog, Me.btnWriteLog, Me.btnReadLog})
      Me.Name = "Form1"
      Me.Text = "Form1"
      CType(Me.EventLog1, System.ComponentModel.ISupportInitialize).EndInit()
      Me.ResumeLayout(False)

   End Sub

#End Region

   Private Sub btnReadLog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReadLog.Click

      'logType can be Application, Security, System or any other Custom Log
      Dim logType As String = "Application"


      'In this case the EventLog constructor is passed a string variable for the log name and 
      'second argument mention the computer name from which you want to read the logs 
      'that you have appropriate permissions for
      Dim ev As New EventLog(logType, System.Environment.MachineName)

      Dim LastLogToShow As Integer = ev.Entries.Count
      If LastLogToShow <= 0 Then
         Console.WriteLine("No Event Logs in the Log :" & logType)
         Exit Sub
      End If

      ' read the last 2 records in the specified log 
      Dim i As Integer
      For i = ev.Entries.Count - 1 To LastLogToShow - 2 Step -1
         Dim CurrentEntry As EventLogEntry = ev.Entries(i)

         Console.WriteLine("Event ID : " & CurrentEntry.EventID)
         Console.WriteLine("Entry Type : " & CurrentEntry.EntryType.ToString())
         Console.WriteLine("Message :  " & CurrentEntry.Message & vbCrLf)
      Next

      ev.Close()

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

      ' Next
   End Sub

   Private Sub btnWriteLog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnWriteLog.Click
      ' When writing to an event log, you must pass the machine name where 
      ' the log resides.  Here the MachineName Property of the Environment class 
      ' is used to determine the name of the local machine.  Assuming you have 
      ' the appropriate permissions, it is also easy to write to event logs on 
      ' other machines.

      'Check if the Source exists 
      If Not EventLog.SourceExists("MySystemSource", System.Environment.MachineName) Then
         EventLog.CreateEventSource("MySystemSource", "System", System.Environment.MachineName)
      End If
      Dim ev As 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, CInt(10001))
      MessageBox.Show("Warning is written to System Log")
      ev.Close()

   End Sub

   Private Sub btnClearLog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClearLog.Click
      ' Create an EventLog instance and pass the log name and MachineName on which the log resides.
      Dim ev As New EventLog("Security", System.Environment.MachineName)
      ev.Clear()
      ev.Close()
   End Sub

   Private Sub btnCreateLog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCreateLog.Click
      'Create the source, if it does not already exist.
      If Not EventLog.SourceExists("MyOldSource", System.Environment.MachineName) Then
         'Creating a new log
         EventLog.CreateEventSource("MyOldSource", "MyNewLog", System.Environment.MachineName)
         Console.WriteLine("CreatingEventSource")
      End If
   End Sub

   Private Sub btnDeleteLog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDeleteLog.Click
      Dim logName As String = "MyNewLog"

      If EventLog.SourceExists("MyOldSource", System.Environment.MachineName) Then
         logName = EventLog.LogNameFromSourceName("MyOldSource", System.Environment.MachineName)
         EventLog.DeleteEventSource("MyOldSource", System.Environment.MachineName)
         EventLog.Delete(logName, System.Environment.MachineName)

         Console.WriteLine(logName & " deleted.")
      End If

   End Sub


   Private Sub btnRecNotice_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRecNotice.Click
      ' Create the source if it does not already exist.
      If Not EventLog1.SourceExists("MySource", System.Environment.MachineName) Then
         EventLog1.CreateEventSource("MySource", "Application", System.Environment.MachineName)
         Console.WriteLine("CreatingEventSource")
      End If

      'Enable EnableRaisingEvents to true
      EventLog1.Log = "Application"
						EventLog1.EnableRaisingEvents = True
      EventLog1.WriteEntry("MySource", "EntryWritten event is fired", EventLogEntryType.Information)
   End Sub

   Private Sub EventLog1_EntryWritten(ByVal sender As Object, ByVal e As System.Diagnostics.EntryWrittenEventArgs) Handles EventLog1.EntryWritten
      If e.Entry.Source = "MySource" Then
         Console.WriteLine("Entry written by my app. Message: " & e.Entry.Message)
      End If
   End Sub

   Private Sub btnListLog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListLog.Click
      Dim remoteEventLogs() As EventLog
      'Gets logs on the local machine, give remote machine name to get the logs on the remote machine
      remoteEventLogs = EventLog.GetEventLogs(System.Environment.MachineName)

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

      Dim log As EventLog
      For Each log In remoteEventLogs
         Console.WriteLine("Log: " & log.Log)
      Next log
   End Sub
End Class

note Vous devez modifier le code dans Visual Basic 2005. Par défaut, Visual Basic crée deux fichiers pour le projet lorsque vous créez un projet Windows Forms. Si le formulaire est nommé Form1, les fichiers deux qui représentent le formulaire sont nommés Form1.vb et Form1.Designer.vb. Vous écrivez le code dans le fichier Form1.vb. Le concepteur Windows Forms écrit le code dans le fichier Form1.Designer.vb. Le concepteur Windows Forms utilise le mot clé partiel pour répartir l'implémentation de Form1 en deux fichiers distincts. Ce comportement empêche le code concepteur généré d'être insérés dans votre code.

Pour plus d'informations sur les nouvelles améliorations de langage Visual Basic 2005, reportez-vous au site de Web MSDN (Microsoft Developer Network) suivant :
http://msdn2.microsoft.com/en-us/library/ms379584(vs.80).aspx
Pour plus d'informations sur des classes partielles et le concepteur Windows Forms, reportez-vous au site Web MSDN suivant :
http://msdn2.microsoft.com/en-us/library/ms171843.aspx

Vérifier les résultats

Pour verfiy vos résultats, procédez comme suit :
  1. Créer une nouvelle application Windows à l'aide de Visual Basic .NET ou Visual Basic 2005.

    Par défaut, Form1.vb est créé.
  2. Remplacez le code de Form1.vb par le code 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 des actions sur Form1.vb .
  5. Pour vérifier le résultat, ouvrez Explorateur de serveurs. Pour ce faire, cliquez sur Explorateur de serveurs dans le menu Affichage .
  6. Développez le n?ud serveurs , puis puis développez votre nom d'ordinateur .
  7. Sous votre nom d'ordinateur , développez journaux des événements .

    note Le n?ud serveurs de l'Explorateur de serveurs n'est pas disponible dans Visual Basic .NET Éducation Edition. Vous pouvez utiliser des événements Windows visionneuse pour afficher les résultats de votre application.
  8. Utilisez l'Explorateur Server pour vérifier que toutes les étapes de cette procédure 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: 814564 - Dernière mise à jour: mercredi 14 novembre 2007 - Version: 2.7
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Initiation
  • Microsoft Visual Basic .NET 2002 Initiation
Mots-clés : 
kbmt kbvs2005swept kbvs2005applies kbeventservice kbnetwork kbmanaged kbprogramming kbeventlog kbhowtomaster KB814564 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: 814564
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