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

Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.

Projděte si také anglickou verzi článku:814564
Microsoft Visual C# .NET verzi tohoto článku naleznete 815314.
Souhrn
Tento podrobný článek popisuje přístup a protokoly událostí systému Windows přizpůsobit pomocí Microsoft .NET Framework. Můžete pracovat s protokoly událostí systému Windows pomocí třídy EventLog. Třída EventLog lze provádět následující akce:
  • Číst z existujících protokolů.
  • Zápis položky do protokolů událostí.
  • Vytvoření nebo odstranění zdroje událostí.
  • Odstranit protokoly.
  • Odpovědět položky protokolu.
Popisuje také vytvořit nové protokoly při vytvoření zdroje událostí.


Požadavky


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

Tento článek předpokládá znalost následujících témat:
  • syntaxe jazyka Microsoft Visual Basic .NET nebo Microsoft Visual Basic 2005,
  • prostředí aplikace Microsoft Visual Studio .NET nebo Microsoft Visual Studio 2005
  • Chyba zpracování .NET Framework

Najít existující protokolování 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 potom vytvoří matici EventLog objekty, 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

Číst a zapisovat do a z místní a vzdálené systému protokolování


Čtení protokoly


Čtení protokolu událostí pomocí položky vlastnosti třídy EventLog. Vlastnost položkyEventLog třídy je kolekce všech položek 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ě zapsat do protokolu událostí, zkontrolujte, zda má aplikace přístup Zápis zápisu do protokolu. Další informace o oprávnění ke čtení a zápisu v protokolech událostí musíte mít na tomto webu společnosti Microsoft.

Zabezpečení Ramification z protokoly událostí
http://msdn2.microsoft.com/en-us/library/4xz6w79h(vs.71).aspx
Musíte nastavit vlastnost zdroj na instanci komponenty EventLog před zapisovat položky protokolu. Při komponenty zapíše položku, systém automaticky ověří, že zadaný zdroj je registrována s součást zápisu do protokolu událostí. Systém pak volání CreateEventSource podle potřeby. Zapsat protokolu událostí, které musí předat název počítače kde je umístěn v protokolu. 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()

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 jeho spuštění události nahrávání znovu. Zrušte zaškrtnutí položky protokolu událostí, musíte mít oprávnění správce pro počítač nachází v protokolu. Volání metody Vymazat na instanci komponenty EventLog.

Následující kód například domonstrates jak vymazat protokol:
      ' 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()

Vytvořit a odstranit vlastní protokoly

Vytvořit vlastní protokol

Vytvořit vlastní obslužné rutiny události vlastní pomocí metody CreateEventSource. Před vytvořením protokolu událostí ověřte, zda používáte zdroj není již existovat a volání CreateEventSource pomocí metody SourceExists. Pokud se pokusíte vytvořit protokolu událostí již existuje chyba System.ArgumentException vyvolána.

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í protokol

Odstranit metodu třídy EventLog použít k odstranění protokolu událostí. Více než jednoho zdroje může zapisovat do protokolu událostí. Proto před odstranit vlastní protokolu ujistěte, že neexistují žádné 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

Příjem událostí oznámení

Můžete přijímat oznámení události při položka je zapsána do určitého protokolu. To provedete implementovat EntryWritten obslužnou rutinu události pro instanci EventLog. Vlastnost EnableRaisingEvents také nastavit na hodnotu 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 lze pouze obdržíte oznámení událostí při položky jsou zapsány v místním počítači. Nemůžete přijímat oznámení pro položky zapsány ve vzdálených počítačích.


Úplný výpis kódu

Imports System.DiagnosticsImports System.SecurityImports System.ComponentModelImports System.IOPublic 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 SubEnd Class
Poznámka: Musíte změnit kód Visual Basic 2005. Ve výchozím nastavení jazyka při vytváření projektu model Windows Forms vytvoří dva soubory projektu. Pokud formulář Form1 název, dva soubory, které představují formuláře jsou nazvány Form1.vb a Form1.Designer.vb. Zapisovat 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é implementace Form1 rozdělit do dvou samostatných souborů. Toto chování zabrání právě spolu s kódu direktivami kód generovaný Návrhář.

Další informace o vylepšení nový jazyk Visual Basic 2005 naleznete na webu Microsoft Developer Network (MSDN): Další informace o částečné třídy a Návrhář model Windows Forms na webu služby MSDN:

Ověřit výsledky

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

    Ve výchozím nastavení je vytvořen Form1.vb.
  2. Kód v tomto článku v části "Výpis dokončeno kód" nahradit kód v Form1.vb.
  3. V nabídce Debug klepněte na tlačítko Start spustit aplikaci.
  4. Provádět akce v Form1.vb
  5. Zkontrolujte výsledek otevřít Server Explorer. V nabídce Zobrazit klepněte na příkaz Server Explorer.
  6. Rozbalte uzel servery a potom rozbalte Názvu počítače.
  7. V části Názvu počítače rozbalte položku protokoly událostí.

    Poznámka: Uzel servery Server Explorer není k dispozici v aplikaci Visual Basic .NET-akademické Edition. Pomocí událostí Windows prohlížeč zobrazit výsledky aplikace.
  8. Pomocí Průzkumníka Server ověřte, že jsou všechny kroky tohoto postupu provedena správně.
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

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 814564 - Poslední kontrola: 11/14/2007 06:30:55 - Revize: 2.7

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbmt kbvs2005swept kbvs2005applies kbeventservice kbnetwork kbmanaged kbprogramming kbeventlog kbhowtomaster KB814564 KbMtcs
Váš názor