Como gravar 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 Como monitorar e responder a eventos com consumidores padrão.

O procedimento a seguir adiciona ao procedimento básico, é específico para a classe LogFileEventConsumer e descreve como criar um consumidor de evento que executa um programa.

Para criar um consumidor de eventos que grava em um arquivo de log

  1. 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).

  2. Forneça o modelo de texto para gravar no arquivo de log na propriedade Text.

    Para obter mais informações, confira Como usar modelos de cadeia de caracteres padrão.

  3. Crie uma instância de __EventFilter e defina uma consulta para especificar os eventos que ativarão o consumidor.

    Para obter mais informações, confira Como consultar com WQL.

  4. Crie uma instância de __FilterToConsumerBinding para associar o filtro à instância de LogFileEventConsumer.

  5. 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.

  6. Compile o arquivo MOF usando Mofcomp.exe.

Exemplo

O exemplo nesta seção está no código do 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

  1. Copie a lista do MOF abaixo em um arquivo de texto e salve-o com uma extensão .mof.

  2. Em uma janela de comando, compile o arquivo MOF (Managed Object Format) usando o comando a seguir.

    Mofcompfilename**.mof**

  3. Abra Logfile.log para ver a linha especificada por LogFileEvent.Name: "Evento 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";  
};

Como monitorar e responder a eventos com consumidores padrão