Ereignisbasiertes Schreiben zu einer Protokolldatei
Die Klasse LogFileEventConsumer kann vordefinierten Text in eine Protokolldatei schreiben, wenn ein angegebenes Ereignis auftritt. Diese Klasse ist ein standardmäßiger Ereignisconsumer, den WMI bereitstellt.
Das grundlegende Verfahren für die Verwendung von Standardconsumern ist immer gleich und befindet sich in Überwachen von und Reagieren auf Ereignisse mit Standardconsumern.
Die folgende Prozedur wird der Basisprozedur hinzugefügt, ist für die Klasse LogFileEventConsumer spezifisch und beschreibt die Erstellung eines Ereignisconsumers, der ein Programm ausführt.
So erstellen Sie einen Ereignisconsumer, der zu einer Protokolldatei schreibt
Erstellen Sie in der Managed Object Format (MOF)-Datei eine Instanz von LogFileEventConsumer, um die mit der Abfrage angeforderten Ereignisse zu erhalten, geben Sie die Instanz in der Eigenschaft Name an, und fügen Sie den Pfad zur Protokolldatei in die Eigenschaft Filename ein.
Weitere Informationen finden Sie unter Entwerfen von MOF-Klassen (Managed Object Format).
Geben Sie die Textvorlage an, die in der Eigenschaft „Text“ zur Protokolldatei 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 zuzuordnen.
Um zu steuern, wer ihre Protokolldatei lesen oder schreiben darf, legen Sie die erforderliche Sicherheitsebene für das Verzeichnis fest, in dem sich das Protokoll befindet.
Kompilieren Sie Ihre MOF-Datei mit Mofcomp.exe.
Beispiel
Das Beispiel in diesem Abschnitt verwendet MOF-Code, Sie können die Instanzen aber auch programmgesteuert erstellen, indem Sie die Skript-API für WMI oder die COM-API für WMI verwenden. Im Beispiel wird die Standardklasse LogFileEventConsumer verwendet, um eine Consumerklasse mit dem Namen LogFileEvent zu erstellen, die eine Zeile zur Datei „c:\Logfile.log“ schreibt, wenn eine Instanz der Klasse LogFileEvent erstellt wird.
Im Folgenden wird die Verwendung des Beispiels näher beschrieben.
So verwenden Sie das Beispiel
Kopieren Sie den MOF-Eintrag unten in eine Textdatei, und speichern Sie ihn mit der Erweiterung .mof.
Kompilieren Sie die MOF-Datei in einem Eingabeaufforderungsfenster mithilfe des folgenden Befehls.
Mofcomp filename**.mof**
Öffnen Sie Logfile.log, um die durch LogFileEvent.Name angegebene Zeile anzuzeigen: „Logfile Event Consumer-Ereignis“.
// 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";
};
Zugehörige Themen