Pengelogan ke Log Peristiwa NT Berdasarkan Peristiwa
Kelas NTEventLogEventConsumer menulis pesan ke log Peristiwa Windows saat peristiwa tertentu terjadi. Kelas ini adalah konsumen peristiwa standar yang disediakan WMI.
Catatan
Pengguna yang diautentikasi tidak dapat, secara default, mencatat peristiwa ke log Aplikasi pada komputer jarak jauh. Akibatnya, contoh yang dijelaskan dalam topik ini akan gagal jika Anda menggunakan properti UNCServerName dari kelas NTEventLogEventConsumer dan menentukan komputer jarak jauh sebagai nilainya. Untuk mempelajari cara mengubah keamanan log peristiwa, lihat artikel KB ini.
Prosedur dasar untuk menggunakan konsumen standar dijelaskan dalam Memantau dan Merespons Peristiwa dengan Konsumen Standar. Berikut ini adalah langkah tambahan di luar prosedur dasar, yang diperlukan saat menggunakan kelas NTEventLogEventConsumer . Langkah-langkah menjelaskan cara membuat konsumen peristiwa yang menulis ke log peristiwa Aplikasi.
Prosedur berikut menjelaskan cara membuat konsumen peristiwa yang menulis ke Log Peristiwa NT.
Untuk membuat konsumen peristiwa yang menulis ke Log Peristiwa Windows
Dalam file Managed Object Format (MOF), buat instans NTEventLogEventConsumer untuk menerima peristiwa yang Anda minta dalam kueri. Untuk informasi selengkapnya tentang menulis kode MOF, lihat Merancang Kelas Managed Object Format (MOF).
Buat, dan beri nama, instans __EventFilter, lalu buat kueri untuk menentukan jenis peristiwa yang memicu penulisan ke Log Peristiwa NT.
Untuk informasi selengkapnya lihat, Mengkueri dengan WQL.
Buat instans __FilterToConsumerBinding untuk mengaitkan filter dengan instans NTEventLogEventConsumer.
Kompilasi file MOF dengan menggunakan Mofcomp.exe.
Contoh
Contoh di bagian ini ada dalam kode MOF, tetapi Anda dapat membuat instans secara terprogram dengan menggunakan Scripting API untuk WMI atau COM API untuk WMI. Contoh menunjukkan cara membuat konsumen untuk menulis ke log peristiwa Aplikasi dengan menggunakan NTEventLogEventConsumer. MOF membuat kelas baru bernama "NTLogCons_Example", filter peristiwa untuk dikueri untuk operasi, seperti pembuatan, pada instans kelas baru ini, dan pengikatan antara filter dan konsumen. Karena tindakan terakhir di MOF adalah membuat instans NTLogCons_Example, Anda dapat segera melihat peristiwa di log peristiwa Aplikasi dengan menjalankan Eventvwr.exe.
EventID=0x0A for SourceName="WinMgmt"
Mengidentifikasi pesan dengan teks berikut. "%1", "%2", "%3" adalah tempat penampung untuk string terkait yang ditentukan dalam array InsertionStringTemplates.
Event filter with query "%2" could not be [re]activated in
namespace "%1" because of error %3. Events may not be delivered
through this filter until the problem is corrected.
Prosedur berikut menjelaskan cara menggunakan contoh.
Untuk menggunakan contoh
Salin daftar MOF di bawah ini ke dalam file teks dan simpan dengan ekstensi .mof.
Di jendela Perintah, kompilasi file MOF dengan menggunakan perintah berikut:
Mofcomp filename**.mof**
Jalankan Eventvwr.exe. Lihat log peristiwa Aplikasi. Anda akan melihat peristiwa dengan ID = 10 ( EventID), Sumber = "WMI", dan Jenis = Kesalahan.
Klik dua kali pesan Jenis informasi dari WMI dengan 10 di kolom Peristiwa. Deskripsi berikut akan ditampilkan untuk peristiwa tersebut.
Event filter with query "STRING2" could not be [re]activated in namespace "STRING1" because of error STRING3. Events cannot be delivered through this filter until the problem is corrected.
// Set the namespace as root\subscription.
// The NTEventLogEventConsumer is already
// compiled in the root\subscription namespace.
#pragma namespace ("\\\\.\\Root\\subscription")
class NTLogCons_Example
{
[key] string name;
string InsertionString;
};
// Create an instance of the NT Event log consumer
// and give it the alias $CONSUMER
instance of NTEventLogEventConsumer as $CONSUMER
{
// Unique instance name
Name = "NTConsumerTest";
// System component that generates the event
SourceName = "WinMgmt";
// Event message WBEM_MC_CANNOT_ACTIVATE_FILTER
EventID = 0xC000000A;
// EVENTLOG_ERROR_TYPE
EventType = 1;
// WMI event messages do not have multiple categories
Category = 0;
// Number of strings in InsertionStringTemplates property
NumberOfInsertionStrings = 3;
InsertionStringTemplates =
{"%TargetInstance.Name%",
"%TargetInstance.InsertionString%",
"STRING3"};
};
// Create an instance of the event filter
// and give it the alias $FILTER
// The filter queries for any instance operation event
// for instances of the NTLogCons_Example class
instance of __EventFilter as $FILTER
{
// Unique instance name
Name = "NTLogConsFilter";
Query = "SELECT * from __InstanceOperationEvent"
" WHERE TargetInstance ISA \"NTLogCons_Example\"";
QueryLanguage = "WQL";
};
// Create an instance of the binding
// between filter and consumer instances.
instance of __FilterToConsumerBinding
{
Consumer = $CONSUMER;
Filter = $FILTER;
};
// Create an instance of this class right now.
instance of NTLogCons_Example
{
Name = "STRING1";
InsertionString = "STRING2";
};
Topik terkait