Schreiben von Einträgen in ein Ereignisprotokoll mithilfe von Visual C++

In diesem Artikel wird beschrieben, wie Sie ihre eigenen Einträge mithilfe der Microsoft .NET Framework zum Ereignisprotokoll des Betriebssystems hinzufügen.

Originalversion des Produkts:   Visual C++
Ursprüngliche KB-Nummer:   815661

Anforderungen

Visual Studio .NET

Schreiben von Einträgen in ein Ereignisprotokoll

Die Ereignisprotokollierung bietet eine standardisierte, zentralisierte Möglichkeit für Ihre Anwendungen, wichtige Software- und Hardwareereignisse aufzuzeichnen. Windows stellt eine Standardbenutzeroberfläche zum Anzeigen der Protokolle zur Ereignisanzeige. Mithilfe der Common Language-Laufzeit-EventLog-Komponente können Sie ganz einfach eine Verbindung mit vorhandenen Ereignisprotokollen auf lokalen und Remotecomputern herstellen und Einträge in diese Protokolle schreiben. Sie können auch Einträge aus vorhandenen Protokollen lesen und eigene benutzerdefinierte Ereignisprotokolle erstellen. In seiner einfachsten Form umfasst das Schreiben in ein Ereignisprotokoll mehrere Schritte zum Erstellen einer Beispielanwendung.

Gehen Sie dazu wie folgt vor:

  1. Starten Sie Visual Studio .NET.

  2. Erstellen Sie ein neues Visual C++ Managed C++-Anwendungsprojekt.

  3. Fügen Sie einen Verweis auf system.dll hinzu, indem Sie dem Code die folgende Zeile hinzufügen:

    #using <system.dll>
    
  4. Verwenden Sie die using Direktive für die System und System::Diagnostics Namespaces, damit Sie später im Code keine Deklarationen aus diesen Namespaces qualifizieren müssen. Sie können die folgenden Anweisungen vor anderen Deklarationen verwenden:

    using namespace System;
    using namespace System::Diagnostics;
    
  5. Zum Schreiben in ein Ereignisprotokoll benötigen Sie mehrere Informationen:

    • Ihre Nachricht
    • Der Name des Protokolls, in das Sie schreiben möchten (es wird erstellt, wenn es noch nicht vorhanden ist)
    • Eine Zeichenfolge, die die Quelle des Ereignisses darstellt

    Sie können eine bestimmte Quelle nur mit einem einzigen Ereignisprotokoll registrieren. Wenn Sie Nachrichten in mehrere Protokolle schreiben möchten, müssen Sie mehrere Quellen definieren.

    String^ sSource;
    String^ sLog;
    String^ sEvent;
    
    sSource = gcnew String("dotNET Sample App1");
    sLog = gcnew String("Application1");
    sEvent = gcnew String("Sample Event1");
    
  6. Verwenden Sie zwei statische Methoden der EventLog Klasse, um zu überprüfen, ob die Quelle vorhanden ist und ob die Quelle nicht vorhanden ist, um diese Quelle zu erstellen, die einem bestimmten Ereignisprotokoll zugeordnet ist. Wenn der angegebene Protokollname nicht vorhanden ist, wird der Name automatisch erstellt, wenn Sie Ihren ersten Eintrag in das Protokoll schreiben. Wenn Sie der CreateEventSource Methode keinen Protokollnamen angeben, heißt die Protokolldatei standardmäßig "Anwendungsprotokoll".

    if(!EventLog::SourceExists(sSource)) EventLog::CreateEventSource(sSource,sLog);
    
  7. Um eine Nachricht in ein Ereignisprotokoll zu schreiben, können Sie die statische Methode EventLog.WriteEntryverwenden. Diese Methode hat mehrere verschiedene überladene Versionen. Der folgende Beispielcode zeigt die einfachste Methode (die eine Quellzeichenfolge und Ihre Nachricht akzeptiert) und eine der komplexeren Methoden (die die Angabe der Ereignis-ID und des Ereignistyps unterstützt):

    EventLog::WriteEntry(sSource,sEvent);
    EventLog::WriteEntry(sSource, sEvent, EventLogEntryType::Warning, 235);
    
  8. Speichern Sie Ihre Anwendung. Führen Sie Ihre Anwendung aus, und überprüfen Sie dann, ob sich die Anwendung im Ereignisanzeige anmeldet, um Ihre neuen Ereignisse anzuzeigen.

Vollständige Codeauflistung in Visual C++ .NET

#include <tchar.h>
#using <system.dll>
#using <mscorlib.dll>

using namespace System;
using namespace System::Diagnostics;

int _tmain()
{
    String^ sSource;
    String^ sLog;
    String^ sEvent;

    sSource = gcnew String("dotNET Sample App1");
    sLog = gcnew String("Application1");
    sEvent = gcnew String("Sample Event1");

     if(!EventLog::SourceExists(sSource))
       EventLog::CreateEventSource(sSource,sLog);

    EventLog::WriteEntry(sSource,sEvent);
    EventLog::WriteEntry(sSource, sEvent,
    EventLogEntryType::Warning, 234);
    return 0;
}