Freigeben über


Schreiben in eine Protokolldatei basierend auf einem Ereignis

Die LogFileEventConsumer-Klasse kann vordefinierten Text in eine Protokolldatei schreiben, wenn ein angegebenes Ereignis auftritt. Diese Klasse ist ein Standardereignisconsumer, den WMI bereitstellt.

Das grundlegende Verfahren für die Verwendung von Standardconsumern ist immer identisch und wird unter Überwachen von Ereignissen und Reagieren auf Ereignisse mit Standardconsumern beschrieben.

Die folgende Prozedur ergänzt das grundlegende Verfahren, ist spezifisch für die LogFileEventConsumer-Klasse und beschreibt die Erstellung eines Ereignisconsumers, der ein Programm ausführt.

So erstellen Sie einen Ereignisconsumer, der in eine Protokolldatei schreibt

  1. Erstellen Sie in der MOF-Datei (Managed Object Format) eine Instanz von LogFileEventConsumer, um die in der Abfrage angeforderten Ereignisse zu empfangen, benennen Sie die Instanz in der Name-Eigenschaft, und platzieren Sie dann den Pfad zur Protokolldatei in der Filename-Eigenschaft.

    Weitere Informationen finden Sie unter Entwerfen von MOF-Klassen (Managed Object Format).

  2. Geben Sie in der Text-Eigenschaft die Textvorlage an, die in die Protokolldatei geschrieben werden soll.

    Weitere Informationen finden Sie unter Verwenden von Standardzeichenfolgenvorlagen.

  3. Erstellen Sie eine Instanz von __EventFilter, und definieren Sie eine Abfrage, um die Ereignisse anzugeben, die den Consumer aktivieren.

    Weitere Informationen finden Sie unter Abfragen mit WQL.

  4. Erstellen Sie eine Instanz von __FilterToConsumerBinding, um den Filter der Instanz von LogFileEventConsumer zuzuordnen.

  5. Um zu steuern, wer Ihre Protokolldatei liest oder schreibt, legen Sie die Sicherheit für das Verzeichnis, in dem sich das Protokoll befindet, auf die erforderliche Ebene fest.

  6. Kompilieren Sie Ihre MOF-Datei mit Mofcomp.exe.

Beispiel

Das Beispiel in diesem Abschnitt basiert auf MOF-Code, aber Sie können die Instanzen auch programmgesteuert erstellen, indem Sie die Skript-API für WMI oder die COM-API für WMI verwenden. Im Beispiel wird der Standard-LogFileEventConsumer verwendet, um eine Consumerklasse namens LogFileEvent zu erstellen. Diese schreibt eine Zeile in die Datei „c:\Logfile.log“, wenn eine Instanz der LogFileEvent-Klasse erstellt wird.

Nachfolgend wird beschrieben, wie Sie das Beispiel verwenden.

So verwenden Sie das Beispiel

  1. Kopieren Sie die nachstehende MOF-Liste in eine Textdatei, und speichern Sie sie mit der Erweiterung „.mof“.

  2. Kompilieren Sie die MOF-Datei in einem Befehlsfenster mit dem folgenden Befehl.

    Mofcompdateiname**.mof**

  3. Öffnen Sie „Logfile.log“, um die durch LogFileEvent.Name angegebene Zeile anzuzeigen: „Logfile Event Consumer event“.

// 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";  
};

Überwachen von Ereignissen und Reagieren auf Ereignisse mit Standardconsumern