Запись в файл журнала на основе события
Класс LogFileEventConsumer может записывать предварительно определенный текст в файл журнала при возникновении указанного события. Этот класс является стандартным потребителем событий, который предоставляет WMI.
Базовая процедура использования стандартных потребителей всегда одинакова и находится в разделе "Мониторинг и реагирование на события со стандартными потребителями".
Следующая процедура добавляется в базовую процедуру, связана с классом LogFileEventConsumer и описывает создание потребителя событий, выполняющего программу.
Создание объекта-получателя события, записываемого в файл журнала
В файле MOF создайте экземпляр LogFileEventConsumer для получения событий, запрашиваемых в запросе, назовите экземпляр в свойстве Name и поместите путь к файлу журнала в свойстве Filename.
Дополнительные сведения см. в разделе "Проектирование классов управляемого объекта (MOF).
Укажите текстовый шаблон для записи в файл журнала в свойстве Text.
Дополнительные сведения см. в разделе "Использование стандартных строковых шаблонов".
Создайте экземпляр __EventFilter и определите запрос, чтобы указать события, которые активируют потребителя.
Дополнительные сведения см. в статье "Запросы с помощью WQL".
Создайте экземпляр __FilterToConsumerBinding для связывания фильтра с экземпляром LogFileEventConsumer.
Чтобы контролировать, кто считывает или записывает в файл журнала, установите безопасность в каталоге, где находится журнал, на необходимый уровень.
Скомпилируйте MOF-файл с помощью Mofcomp.exe.
Пример
Пример в этом разделе приведен в коде MOF, но вы можете создавать экземпляры программным способом с помощью API скриптов для WMI или COM-API для WMI. В примере используется стандартный LogFileEventConsumer для создания класса-получателя с именем LogFileEvent, который записывает строку в файл c:\Logfile.log при создании экземпляра класса LogFileEvent.
В следующей процедуре описывается, как использовать пример.
Использование примера
Скопируйте приведенный ниже список MOF в текстовый файл и сохраните его с расширением MOF.
В командном окне скомпилируйте MOF-файл с помощью следующей команды.
Mofcomp filename**.mof**
Откройте 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";
};
См. также