Partager via


Écriture dans un fichier journal basé sur un événement

La classe LogFileEventConsumer peut écrire du texte prédéfini dans un fichier journal lorsqu’un événement spécifié se produit. Cette classe est un consommateur d’événements standard fourni par WMI.

La procédure de base pour utiliser les consommateurs standard est toujours la même, et se trouve dans Surveillance et réponse aux événements avec des consommateurs standard.

La procédure suivante s’ajoute à la procédure de base, est spécifique à la classe LogFileEventConsumer, et décrit comment créer un consommateur d’événements qui exécute un programme.

Pour créer un consommateur d’événements qui écrit dans un fichier journal

  1. Dans le fichier Managed Object Format (MOF), créez une instance de LogFileEventConsumer pour recevoir les événements que vous demandez dans la requête, nommez l’instance dans la propriété Name, puis placez le chemin du fichier journal dans la propriété Filename.

    Pour plus d’informations, consultez Conception des classes format MOF (Managed Object Format).

  2. Fournissez le modèle de texte à écrire dans le fichier journal dans la propriété Text.

    Pour plus d’informations, consultez Utilisation des modèles de chaîne standard.

  3. Créez une instance de __EventFilter et définissez une requête pour spécifier les événements qui activeront le consommateur.

    Pour plus d’informations, consultez Requêtes avec WQL.

  4. Créez une instance de __FilterToConsumerBinding pour associer le filtre à l’instance de LogFileEventConsumer.

  5. Pour contrôler qui lit ou écrit dans votre fichier journal, définissez la sécurité du répertoire où se trouve le journal au niveau requis.

  6. Compilez votre fichier MOF en utilisant Mofcomp.exe.

Exemple

L’exemple dans cette section est en code MOF, mais vous pouvez créer les instances de manière programmatique en utilisant l’API de script pour WMI ou l’API COM pour WMI. L’exemple utilise le LogFileEventConsumer standard pour créer une classe de consommateur nommée LogFileEvent qui écrit une ligne dans le fichier c:\Logfile.log lorsqu’une instance de la classe LogFileEvent est créée.

La procédure suivante décrit comment utiliser l’exemple.

Pour utiliser l’exemple

  1. Copiez la liste MOF ci-dessous dans un fichier texte et enregistrez-le avec une extension .mof.

  2. Dans une fenêtre de commande, compilez le fichier MOF en utilisant la commande suivante.

    Mofcomp nomdefichier**.mof**

  3. Ouvrez Logfile.log pour voir la ligne spécifiée par LogFileEvent.Name : « événement du consommateur Logfile Event Consumer ».

// Set the namespace as root\subscription.
// The LogFileEventConsumer is already compiled 
//     in the root\subscription namespace. 

#pragma namespace ("\\\\.\\Root\\subscription")

class LogFileEvent
{
    [key]string Name;
};

// Create an instance of the standard log
// file consumer and give it the alias $CONSUMER

instance of LogFileEventConsumer as $CONSUMER
{
    // If the file does not already exist, it is created.
    Filename = "c:\\Logfile.log";  
    IsUnicode = FALSE;
    // Name of this instance of LogFileEventConsumer
    Name = "LogfileEventConsumer_Example";  
    // See "Using Standard String Templates"; 
    Text = "%TargetInstance.Name%"; 
    // TargetInstance is the instance of LogFileEvent 
    //    requested in the filter        
                                         
};

// Create an instance of the event filter 
// and give it the alias $FILTER
// Query for any instance operation type,
// such as instance creation, for LogFileEvent class

instance of __EventFilter as $FILTER
{
    Name = "LogFileFilter";
    Query = "SELECT * FROM __InstanceOperationEvent "
        "WHERE TargetInstance.__class = \"LogFileEvent\"";
    QueryLanguage = "WQL";
};

// Create an instance of the binding.

instance of __FilterToConsumerBinding
{
    Consumer=$CONSUMER;
    Filter=$FILTER;
 DeliverSynchronously=FALSE;
};

// Create an instance of this class right now
// Look at the file c:\Logfile.log to see
// that a line has been written.

instance of LogFileEvent
{
 Name = "Logfile Event Consumer event";  
};

Surveillance et réponse aux événements avec des consommateurs standard