Gravando em um arquivo de log com base em um evento
A classe LogFileEventConsumer pode gravar texto predefinido em um arquivo de log quando ocorre um evento especificado. Essa classe é um consumidor de evento padrão que o WMI fornece.
O procedimento básico para usar consumidores padrão é sempre o mesmo e está localizado em Monitorando e respondendo a eventos com consumidores padrão.
O procedimento a seguir é adicionado ao procedimento básico, é específico para a classe LogFileEventConsumer e descreve como criar um consumidor de eventos que executa um programa.
Para criar um consumidor de eventos que grava em um arquivo de log
No arquivo MOF (Managed Object Format), crie uma instância de LogFileEventConsumer para receber os eventos solicitados na consulta, nomeie a instância na propriedade Name e coloque o caminho para o arquivo de log na propriedade Filename.
Para obter mais informações, confira Como criar classes MOF (Managed Object Format).
Forneça o modelo de texto a ser gravado no arquivo de log na propriedade Text.
Para obter mais informações, consulte Usando modelos de cadeia de caracteres padrão.
Crie uma instância de __EventFilter e defina uma consulta para especificar os eventos que ativarão o consumidor.
Para obter mais informações, consulte Consultar com WQL.
Crie uma instância de __FilterToConsumerBinding para associar o filtro à instância de LogFileEventConsumer.
Para controlar quem lê ou grava no arquivo de log, defina a segurança no diretório em que o log está localizado para o nível necessário.
Compile seu arquivo MOF usando Mofcomp.exe.
Exemplo
O exemplo nesta seção está no código MOF, mas você pode criar as instâncias programaticamente usando a API de Script para WMI ou a API COM para WMI. O exemplo usa o LogFileEventConsumer padrão para criar uma classe de consumidor chamada LogFileEvent que grava uma linha no arquivo c:\Logfile.log quando uma instância da classe LogFileEvent é criada.
O procedimento a seguir descreve como usar o exemplo.
Para usar o exemplo
Copie a listagem do MOF abaixo em um arquivo de texto e salve-o com uma extensão .mof.
Em uma janela de comando, compile o arquivo MOF usando o comando a seguir.
Nome do arquivoMofcomp**.mof**
Abra Logfile.log para ver a linha especificada por LogFileEvent.Name: "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";
};
Tópicos relacionados