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

Pour obtenir une version Microsoft Visual C# .NET de cet article, reportez-vous à la section.
815314 .

Résumé

Cet article étape par étape décrit comment afficher et personnaliser les journaux des événements Windows à l’aide de Microsoft.NET Framework. Vous pouvez interagir avec les journaux d’événements Windows à l’aide de la classe EventLog . Vous pouvez utiliser la classe EventLog pour effectuer les opérations suivantes :
  • Lire les journaux existants.
  • Permet d’écrire des entrées dans les journaux des événements.
  • Créer ou supprimer des sources d’événements.
  • Supprimer les journaux.
  • Répondre à des entrées de journal.
Cet article décrit également comment créer de nouveaux journaux lors de la création d’une source d’événements.

Retour au début

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 :
  • Microsoft.NET Framework
  • Microsoft Visual Basic .NET ou Microsoft Visual Basic 2005

Cet article suppose que vous maîtrisez 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
Retour au début

Rechercher les journaux existants sur un ordinateur


Vous pouvez trouver les journaux existants sur un ordinateur à l’aide de la méthode GetEventLogs partagés de la classe EventLog . La méthode GetEventLogs recherche tous les journaux des événements sur l’ordinateur local, et il crée ensuite un tableau d’objets EventLog qui contiennent la liste. L’exemple de code suivant récupère la liste des journaux sur l’ordinateur local, puis affiche les noms 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
Retour au début

Lire et écrire des journaux vers et à partir de l’ordinateur Local et le système distant


Lire les journaux


Pour lire un journal des événements, utilisez la propriété de la classe EventLog Entries . La entrées de propriété de la classe EventLog est une collection de toutes les entrées dans le journal des événements. L’exemple de code suivant montre comment itérer sur cette collection et comment lire toutes les entrées dans le 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()

Écrire des journaux


Pour écrire un journal des événements, utilisez la méthode WriteEntry de la classe EventLog . Pour écrire le journal des événements avec succès, vérifiez que votre application a un accès en écriture pour le journal dans lequel il est écrit. Pour plus d’informations sur les autorisations dont vous devez disposer pour lire et écrire dans les journaux 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 d’écrire des entrées dans un journal. Lorsque votre composant écrit une entrée, le système vérifie automatiquement que la source spécifiée est inscrite avec lequel le composant écrit le journal des événements. Le système appelle ensuite la méthode CreateEventSource si nécessaire. Pour écrire un journal des événements, vous devez passer le nom de l’ordinateur où se trouve le journal. Dans l’exemple de code suivant, la propriété MachineName de la classe Environment 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()
Retour au début

Effacer les journaux


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

Le code suivant domonstrates d’exemple comment 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()
Retour au début

Créer et supprimer des journaux personnalisés

Créer le journal personnalisé

Pour créer votre propre gestionnaire d’événements personnalisé, utilisez la méthode CreateEventSource . Avant de créer le journal des événements, utilisez la méthode SourceExists pour vérifier que la source que vous utilisez ne pas existent déjà et ensuite appeler CreateEventSource. Si vous essayez de créer un journal des événements qui existe déjà, une erreur System.ArgumentException est levée.

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

Supprimer le journal personnalisé

Utilisez la méthode Delete de la classe EventLog pour supprimer le journal des événements. 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 aucun autres sources qui écrivent 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
Retour au début

Recevoir des Notifications d’événement

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

L’exemple de code suivant montre comment recevoir des notifications d’événements :
      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 ne pouvez 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 écrites sur des ordinateurs distants.

Retour au début

Listing complet du Code

Imports System.DiagnosticsImports 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


Remarque 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 deux fichiers 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é partial pour diviser l’implémentation de Form1 en deux fichiers distincts. Ce comportement empêche le code généré par le Concepteur d’être entrecoupé par votre code.

Pour plus d’informations sur les nouvelles améliorations du langage Visual Basic 2005, visitez le site Web de Microsoft Developer Network (MSDN) à l’adresse suivante :

Pour plus d’informations sur les classes partielles et le Concepteur Windows Forms, visitez le site Web MSDN suivant :

Retour au début

Vérifier les résultats

Pour vérifier les résultats, procédez comme suit :
  1. Créez 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 dans Form1.vb par le code dans la section « Liste de Code complète » 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 les résultats, ouvrez l’Explorateur de serveurs. Pour ce faire, cliquez sur Explorateur de serveurs dans le menu affichage .
  6. Développez le nœud serveurs , puis développez
    Le nom de votre ordinateur.
  7. Sous le Nom de votre ordinateur, développez
    Journaux des événements.

    Remarque Le nœud serveurs de l’Explorateur de serveurs n’est pas disponible dans l’Édition Éducation de Visual Basic .NET. Vous pouvez utiliser l’Observateur d’événements Windows pour afficher les résultats de votre application.
  8. Utilisez l’Explorateur de serveurs pour vérifier que toutes les étapes de cette procédure sont correctement exécutées.
Retour au début

Références

Pour plus d’informations, visitez le site Web de Microsoft à l’adresse suivante :

Classe EventLog
http://msdn2.microsoft.com/en-us/library/system.diagnostics.eventlog(vs.71).aspx

Retour au début
Propriétés

ID d'article : 814564 - Dernière mise à jour : 27 janv. 2017 - Révision : 1

Commentaires