基于事件写入日志文件
当发生指定事件时,LogFileEventConsumer 类可以将预定义文本写入日志文件。 此类是 WMI 提供的标准事件使用者。
使用标准使用者的基本过程始终相同,并且位于使用标准使用者监视和响应事件中。
以下程序是对基本过程的补充;特定于 LogFileEventConsumer;并描述了如何创建运行程序的事件使用者。
创建写入日志文件的事件使用者
在托管对象格式 (MOF) 文件中,创建一个 LogFileEventConsumer 的实例来接收在查询中请求的事件,在 Name 属性中命名该实例,然后将日志文件的路径放置在 Filename 属性中。
有关详细信息,请参阅设计托管对象格式 (MOF) 类。
在 Text 属性中提供要写入日志文件的文本模板。
有关详细信息,请参阅使用标准字符串模板。
创建 __EventFilter 的实例,并定义一个查询来指定将激活使用者的事件。
有关详细信息,请参阅利用 WQL 进行查询。
创建 __FilterToConsumerBinding 的实例,将筛选器与 LogFileEventConsumer 的实例相关联。
若要控制谁读取或写入日志文件,请将日志所在目录的安全性设置为所需级别。
使用 Mofcomp.exe 编译 MOF 文件。
示例
本节中的示例在 MOF 代码中,但可以通过使用适用于 WMI 的脚本 API 或适用于 WMI 的 COM API 以编程方式创建实例。 该示例使用标准 LogFileEventConsumer 创建名为 LogFileEvent 的使用者类,当创建类 LogFileEvent 的实例时,该类会向 c:\Logfile.log 文件写入一行。
以下过程介绍如何使用示例。
使用示例
将下面的 MOF 列表复制到文本文件中,并使用 .mof 扩展名保存该文件。
在命令窗口中,使用以下命令编译 MOF 文件。
Mofcomp filename**.mof**
打开 Logfile.log,以查看由 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";
};
相关主题