Jak spravovat protokoly událostí pomocí Visual Basic .NET nebo Visual Basic 2005

Microsoft Visual C# .NET verzi tohoto článku naleznete v tématu
815314 .

Souhrn

Tento podrobný článek popisuje, jak přístup a přizpůsobit protokoly událostí systému Windows pomocí Microsoft rozhraní.NET Framework. Můžete pracovat s protokoly událostí systému Windows, pomocí třídy EventLog . Pomocí třídy EventLog lze provádět následující akce:
  • Číst z existujících protokolů.
  • Zapište položky protokolu událostí.
  • Vytvoření nebo odstranění zdroje událostí.
  • Odstraňte protokoly.
  • Odpověď protokolovat položky.
Tento článek popisuje, jak vytvořit nové protokoly při vytvoření zdroje událostí.

zpět na horní

Požadavky


Následující seznam obsahuje doporučený hardware, software, síťovou infrastrukturu a požadované aktualizace service Pack:
  • Microsoft rozhraní.NET Framework
  • Microsoft Visual Basic .NET nebo Microsoft Visual Basic 2005

Tento článek předpokládá, že jste obeznámeni s následující témata:
  • Microsoft Visual Basic .NET nebo Microsoft Visual Basic 2005 syntaxe
  • Microsoft Visual Studio .NET nebo Microsoft Visual Studio 2005 prostředí
  • Zpracování chyb v rozhraní.NET Framework
zpět na horní

Hledání existujících protokolů v počítači


Existující protokoly můžete najít v počítači pomocí metody GetEventLogs sdílené třídy EventLog . Metoda GetEventLogs vyhledá všechny protokoly událostí v místním počítači a vytvoří pole EventLog objektů, které obsahují seznam. Následující příklad kódu načte seznam protokolů na místním počítači a zobrazí názvy protokolů v okně konzoly:
      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
zpět na horní

Číst a zapisovat protokoly z místní nebo vzdálený systém


Čtení protokoly


Čtení protokolu událostí, pomocí položky vlastnosti třídy EventLog . Položky vlastnosti třídy EventLog je kolekce všechny položky v protokolu událostí. Následující příklad kódu ukazuje, jak iterovat této kolekce a jak číst všechny položky v určeném protokolu:
      ' 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()

Zapisovat protokoly


Zápis protokolu událostí, použijte metodu WriteEntry třídy EventLog . Úspěšně zapisovat do protokolu událostí, zkontrolujte, zda že vaše aplikace má přístup pro zápis, který zapisuje do protokolu. Další informace o oprávnění, která musí mít ke čtení a zápisu v protokolu událostí naleznete na následujícím webu společnosti Microsoft.

Ramification zabezpečení protokolů událostí
http://msdn2.microsoft.com/en-us/library/4xz6w79h(vs.71).aspx
Před zápisem položky protokolu, musíte nastavit vlastnost zdroj na instanci komponenty EventLog . Když vaše komponenta zapíše položku, systém automaticky ověří zadaný zdroj není zaregistrován součásti zapisuje do protokolu událostí. Systém pak zavolá CreateEventSource podle potřeby. Zápis protokolu událostí, musíte předat název počítače kde je umístěn protokol. V následujícím příkladu kódu nazev_pocitace vlastnost třídy prostředí Určuje název místního počítače:
        ' 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()
zpět na horní

Vymazat protokoly


Při zaplnění protokolu událostí, přestane zaznamenávat nové události informace nebo začne přepsat předchozí položky. Zastaví zaznamenávání událostí, můžete vymazat protokol existující položky a povolit jej znovu spustit záznam událostí. Chcete-li vymazat položky protokolu událostí, musíte mít oprávnění správce pro počítač, který je umístěn v protokolu na. Volání metody Vymazat na instanci komponenty EventLog .

Následující kód příkladu domonstrates vymazání protokolu:
      ' 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()
zpět na horní

Vytvoření a odstranění vlastních protokolů

Vytvoření vlastního protokolu

Chcete-li vytvořit vlastní vlastní obslužnou rutinu události pomocí metody CreateEventSource . Před vytvoření protokolu událostí ověřte, zda zdroj, který používáte není již existovat a potom voláním CreateEventSourcepomocí metody SourceExists . Pokud se pokusíte vytvořit protokol událostí, který již existuje, je vyvolána chyba System.ArgumentException .

Následující příklad kódu ukazuje, jak vytvořit vlastní protokol:
      ' 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

Odstranit vlastní protokolu

Odstranění protokolu událostí použijte metodu Odstranění třídy EventLog . Více než jeden zdroj může zapisovat do protokolu událostí. Proto před odstraněním vlastní protokolu, ujistěte se, že neexistují žádné jiné zdroje, zápis do protokolu.

Následující příklad kódu ukazuje, jak odstranit vlastní protokolu:
      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
zpět na horní

Příjem oznámení o události

Můžete přijímat oznámení události při položka je zapsána do určitého protokolu. To provedete implementujte EntryWritten obslužnou rutinu události pro instanci EventLog . Navíc nastavte vlastnost EnableRaisingEvents na true.

Následující příklad kódu ukazuje, jak přijímat oznámení událostí:
      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
Poznámka: Můžete přijímat oznámení události při položky jsou zapsány v místním počítači. Nelze přijímat oznámení pro položky jsou zapsány ve vzdálených počítačích.

zpět na horní

Úplný výpis kódu

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


Poznámka: Je nutné změnit kód v jazyce Visual Basic 2005. Ve výchozím nastavení jazyka Visual Basic vytvoří dva soubory projektu při vytvoření projektu model Windows Forms. Pokud formulář s názvem Form1, dva soubory, které představují formuláře jsou pojmenovány Form1.vb a Form1.Designer.vb. Píšete kód v souboru Form1.vb. Návrhář model Windows Forms zapíše kód v souboru Form1.Designer.vb. Návrhář model Windows Forms používá klíčové slovo částečné provádění Form1 rozdělit do dvou samostatných souborů. Toto chování zabraňuje generované designer kód je proloženo kódu.

Další informace o nová vylepšení jazyka Visual Basic 2005 navštivte následující Web společnosti Microsoft Developer Network (MSDN):

Další informace o částečné třídy a Návrhář model Windows Forms naleznete na následujícím webu MSDN:

zpět na horní

Ověřit výsledky

Chcete-li verfiy výsledky, postupujte takto:
  1. Vytvořte novou aplikaci Windows pomocí Visual Basic .NET nebo Visual Basic 2005.

    Ve výchozím nastavení je vytvořen Form1.vb .
  2. Nahraďte kód v Form1.vb kódu v části "Úplný výpis kódu" tohoto článku.
  3. V nabídce Debug klepněte na tlačítko
    Start ke spuštění aplikace.
  4. Proveďte akce na Form1.vb.
  5. Chcete-li ověřit výsledky, otevřete Server Explorer. Chcete-li to provést, klepněte na tlačítko Server Explorer v nabídce Zobrazit .
  6. Rozbalte uzel servery a potom rozbalte položku
    Název vašeho počítače.
  7. U Názvu počítačerozbalte položku
    Protokoly událostí.

    Poznámka: Uzel servery Server Explorer není k dispozici v Visual Basic .NET Academic Edition. Chcete-li zobrazit výsledky aplikace můžete použít Prohlížeč událostí systému Windows.
  8. Pomocí Průzkumníka Server ověřte, že jsou všechny kroky v tomto postupu provedena správně.
zpět na horní

Odkazy

Další informace naleznete na následujícím webu společnosti Microsoft:

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

zpět na horní
Vlastnosti

ID článku: 814564 - Poslední kontrola: 16. 1. 2017 - Revize: 1

Váš názor