根據事件寫入記錄檔
LogFileEventConsumer 類別可以在發生指定的事件時,將預先定義的文字寫入記錄檔。 這個類別是 WMI 提供的標準事件取用者。
使用標準取用者的基本程式一律相同,且位於使用標準取用者的監視和回應事件中。
下列程式會新增至基本程式,是LogFileEventConsumer類別特有的程式,並說明如何建立執行程式的事件取用者。
建立寫入記錄檔的事件取用者
在 Managed 物件格式 (MOF) 檔案中,建立 LogFileEventConsumer 的實例,以接收您在查詢中要求的事件、將實例命名為 Name 屬性,然後將記錄檔的路徑放在 Filename 屬性中。
如需詳細資訊,請參閱 設計 Managed 物件格式 (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 事件取用者事件」。
// 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";
};
相關主題