Écrire des entrées dans un journal des événements à l’aide de Visual C++

Cet article explique comment ajouter vos propres entrées au journal des événements du système d’exploitation à l’aide de Microsoft .NET Framework.

Version d’origine du produit : Visual C++
Numéro de la base de connaissances d’origine : 815661

Configuration requise

Visual Studio .NET

Écrire des entrées dans un journal des événements

La journalisation des événements fournit un moyen standard et centralisé pour vos applications d’enregistrer des événements logiciels et matériels importants. Windows fournit une interface utilisateur standard pour l’affichage des journaux : le observateur d'événements. En utilisant le composant EventLog de l’exécution du langage courant, vous pouvez vous connecter facilement aux journaux d’événements existants, sur des ordinateurs locaux et distants, et écrire des entrées dans ces journaux. Vous pouvez également lire les entrées des journaux existants et créer vos propres journaux d’événements personnalisés. Dans sa forme la plus simple, l’écriture dans un journal des événements implique plusieurs étapes pour créer un exemple d’application.

Pour ce faire, procédez comme suit :

  1. Démarrez Visual Studio .NET.

  2. Créez un projet d’application C++ managée Visual C++.

  3. Ajoutez une référence à system.dll en ajoutant la ligne suivante au code :

    #using <system.dll>
    
  4. Utilisez la using directive sur les System espaces de noms et System::Diagnostics afin de ne pas avoir à qualifier les déclarations de ces espaces de noms ultérieurement dans votre code. Vous pouvez utiliser les instructions suivantes avant toute autre déclaration :

    using namespace System;
    using namespace System::Diagnostics;
    
  5. Pour écrire dans un journal des événements, vous devez disposer de plusieurs informations :

    • Votre message
    • Nom du journal dans lequel vous souhaitez écrire (il est créé s’il n’existe pas déjà)
    • Chaîne qui représente la source de l’événement

    Vous pouvez inscrire une source particulière avec un seul journal des événements. Si vous souhaitez écrire des messages dans plusieurs journaux, vous devez définir plusieurs sources.

    String^ sSource;
    String^ sLog;
    String^ sEvent;
    
    sSource = gcnew String("dotNET Sample App1");
    sLog = gcnew String("Application1");
    sEvent = gcnew String("Sample Event1");
    
  6. Utilisez deux méthodes statiques de la EventLog classe pour case activée si votre source existe et si la source n’existe pas, pour créer cette source associée à un journal des événements particulier. Si le nom du journal que vous spécifiez n’existe pas, le nom est créé automatiquement lorsque vous écrivez votre première entrée dans le journal. Par défaut, si vous ne fournissez pas de nom de journal à la CreateEventSource méthode, le fichier journal est nommé Journal des applications.

    if(!EventLog::SourceExists(sSource)) EventLog::CreateEventSource(sSource,sLog);
    
  7. Pour écrire un message dans un journal des événements, vous pouvez utiliser la méthode EventLog.WriteEntrystatique . Cette méthode a plusieurs versions surchargées différentes. L’exemple de code suivant montre la méthode la plus simple (qui prend une chaîne source et votre message) et l’une des méthodes les plus complexes (qui prend en charge la spécification de l’ID d’événement et du type d’événement) :

    EventLog::WriteEntry(sSource,sEvent);
    EventLog::WriteEntry(sSource, sEvent, EventLogEntryType::Warning, 235);
    
  8. Enregistrez votre application. Exécutez votre application, puis case activée l’application connectez-vous au observateur d'événements pour voir vos nouveaux événements.

Liste complète du code dans 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;
}