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 Standardereignis-Consumer, den WMI bietet.
Das grundlegende Verfahren für die Verwendung von Standardverbrauchern ist immer identisch und befindet sich unter Überwachung und Reaktion auf Ereignisse mit Standardverbrauchern.
Die folgende Prozedur fügt der grundlegenden Prozedur hinzu, ist spezifisch für die LogFileEventConsumer-Klasse und beschreibt, wie ein Ereignisconsumer erstellt wird, der ein Programm ausgeführt.
So erstellen Sie einen Ereignisverbraucher, der in eine Protokolldatei schreibt
Erstellen Sie in der MOF-Datei (Managed Object Format) eine Instanz von LogFileEventConsumer, um die ereignisse zu empfangen, die Sie in der Abfrage anfordern, 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 Managed Object Format -Klassen (MOF).
Geben Sie die Textvorlage an, die in die Protokolldatei in der Text-Eigenschaft geschrieben werden soll.
Weitere Informationen finden Sie unter Verwenden von Standardzeichenfolgenvorlagen.
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.
Erstellen Sie eine Instanz von _ _ FilterToConsumerBinding, um den Filter der Instanz von LogFileEventConsumer zu zuordnen.
Um zu steuern, wer die Protokolldatei liest oder schreibt, legen Sie die Sicherheit für das Verzeichnis, in dem sich das Protokoll befindet, auf die erforderliche Ebene fest.
Kompilieren Sie ihre MOF-Datei mitMofcomp.exe.
Beispiel
Das Beispiel in diesem Abschnitt befindet sich im MOF-Code, aber Sie können die Instanzen programmgesteuert erstellen, indem Sie die Skript-API für WMI oder die COM-API für WMI verwenden. Im Beispiel wird der LogFileEventConsumer-Standard verwendet, um eine Consumerklasse namens LogFileEvent zu erstellen, die eine Zeile in die Datei c: Logfile.log schreibt, wenn eine Instanz der \ Klasse LogFileEvent erstellt wird.
Im folgenden Verfahren wird die Verwendung des Beispiels beschrieben.
So verwenden Sie das Beispiel
Kopieren Sie die mof-Auflistung unten in eine Textdatei, und speichern Sie sie mit der Erweiterung MOF.
Kompilieren Sie die MOF-Datei in einem Befehlsfenster mit dem folgenden Befehl.
Mofcomp-Dateiname*.mof**
Öffnen Sie Logfile.log, um die zeile zu sehen, die von LogFileEvent.Name" angegeben wird: "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";
};