Поделиться через


Запись в файл журнала на основе события

Класс LogFileEventConsumer может записывать предварительно определенный текст в файл журнала при возникновении указанного события. Этот класс является стандартным потребителем событий, который предоставляет WMI.

Базовая процедура использования стандартных потребителей всегда одинакова и находится в разделе "Мониторинг и реагирование на события со стандартными потребителями".

Следующая процедура добавляется в базовую процедуру, связана с классом LogFileEventConsumer и описывает создание потребителя событий, выполняющего программу.

Создание объекта-получателя события, записываемого в файл журнала

  1. В файле MOF создайте экземпляр LogFileEventConsumer для получения событий, запрашиваемых в запросе, назовите экземпляр в свойстве Name и поместите путь к файлу журнала в свойстве Filename.

    Дополнительные сведения см. в разделе "Проектирование классов управляемого объекта (MOF).

  2. Укажите текстовый шаблон для записи в файл журнала в свойстве Text.

    Дополнительные сведения см. в разделе "Использование стандартных строковых шаблонов".

  3. Создайте экземпляр __EventFilter и определите запрос, чтобы указать события, которые активируют потребителя.

    Дополнительные сведения см. в статье "Запросы с помощью WQL".

  4. Создайте экземпляр __FilterToConsumerBinding для связывания фильтра с экземпляром LogFileEventConsumer.

  5. Чтобы контролировать, кто считывает или записывает в файл журнала, установите безопасность в каталоге, где находится журнал, на необходимый уровень.

  6. Скомпилируйте MOF-файл с помощью Mofcomp.exe.

Пример

Пример в этом разделе приведен в коде MOF, но вы можете создавать экземпляры программным способом с помощью API скриптов для WMI или COM-API для WMI. В примере используется стандартный LogFileEventConsumer для создания класса-получателя с именем LogFileEvent, который записывает строку в файл c:\Logfile.log при создании экземпляра класса LogFileEvent.

В следующей процедуре описывается, как использовать пример.

Использование примера

  1. Скопируйте приведенный ниже список MOF в текстовый файл и сохраните его с расширением MOF.

  2. В командном окне скомпилируйте MOF-файл с помощью следующей команды.

    Mofcomp filename**.mof**

  3. Откройте Logfile.log, чтобы просмотреть строку, указанную LogFileEvent.Name: "Событие потребителя событий logfile".

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

Мониторинг и реагирование на события с помощью стандартных потребителей