Bagikan melalui


Pengidentifikasi Peristiwa (Pengelogan Peristiwa)

Pengidentifikasi peristiwa secara unik mengidentifikasi peristiwa tertentu. Setiap sumber peristiwa dapat menentukan peristiwa bernomornya sendiri dan string deskripsi yang dipetakan dalam file pesannya. Penampil peristiwa dapat menyajikan string ini kepada pengguna. Mereka akan membantu pengguna memahami apa yang salah dan menyarankan tindakan apa yang harus diambil. Arahkan deskripsi di pengguna yang memecahkan masalah mereka sendiri, bukan pada administrator atau teknisi dukungan. Untuk informasi selengkapnya, lihat Panduan Pesan Kesalahan.

Format

Diagram berikut mengilustrasikan format pengidentifikasi peristiwa.

  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 +---+-+-+-----------------------+-------------------------------+
 |Sev|C|R|     Facility          |               Code            |
 +---+-+-+-----------------------+-------------------------------+

Sev

Keparahan. Tingkat keparahan didefinisikan sebagai berikut:

00 - Berhasil
01 - Informasi
10 - Peringatan
11 - Kesalahan

C

Pelanggan sedikit. Bit ini didefinisikan sebagai berikut:

0 - Kode sistem
1 - Kode pelanggan

R

Bit yang dipesan.

Fasilitas

Kode fasilitas. Nilai ini dapat FACILITY_NULL.

Kode

Kode status untuk fasilitas.

Definisi Pesan

Pesan ditentukan dalam file pesan peristiwa. String deskripsi dalam file pesan peristiwa diindeks oleh pengidentifikasi peristiwa, memungkinkan Pemantau Peristiwa menampilkan teks khusus peristiwa untuk peristiwa apa pun berdasarkan pengidentifikasi peristiwa. Semua deskripsi dilokalkan dan bergantung pada bahasa. Untuk informasi selengkapnya tentang membuat file pesan, lihat File Teks Pesan.

String deskripsi mungkin berisi tempat penampung string penyisipan, dari formulir %n, di mana %1 menunjukkan string penyisipan pertama, dan sebagainya. Misalnya, berikut ini adalah contoh entri dalam file .mc:

MessageId=0x4
Severity=Error
Facility=System
SymbolicName=MSG_CMD_DELETE
Language=English
File %1 contains %2, which is in error.
.

Dalam hal ini, buffer yang dikembalikan oleh ReadEventLog berisi string penyisipan. Anggota NumStrings dari struktur EVENTLOGRECORD menunjukkan jumlah string penyisipan. Anggota StringOffset dari struktur EVENTLOGRECORD menunjukkan lokasi string penyisipan pertama dalam buffer. Anda dapat meneruskan array DWORD_PTRs yang menunjuk ke alamat setiap string dalam buffer saat memanggil fungsi FormatMessage dan itu akan menyisipkan string ke dalam pesan.

String deskripsi juga dapat berisi tempat penampung untuk string parameter dari file pesan parameter. Tempat penampung adalah formulir %%n, di mana %%1 digantikan oleh string parameter dengan pengidentifikasi 1, dan sebagainya. Namun, terserah Anda untuk menyisipkan string parameter ke dalam string pesan yang dikembalikan FormatMessage . Biasanya, Anda memanggil FormatMessage untuk mendapatkan string pesan untuk peristiwa tersebut. Anda kemudian mengurai string pesan untuk parameter %%n . Jika pesan berisi satu atau beberapa parameter, muat nilai registri ParameterMessageFile untuk sumbernya. Untuk setiap parameter dalam string pesan, dapatkan pengidentifikasi dan teruskan ke FormatMessage untuk mendapatkan string parameter. Ganti parameter dalam string pesan dengan string parameter yang dikembalikan FormatMessage .

String Penyisipan

String penyisipan adalah string independen bahasa opsional yang digunakan untuk mengisi nilai untuk tempat penampung dalam string deskripsi. Karena string tidak dilokalkan, sangat penting bahwa tempat penampung ini hanya digunakan untuk mewakili string independen bahasa seperti nilai numerik, nama file, nama pengguna, dan sebagainya. Panjang string tidak boleh melebihi 32 kilobyte - 1 karakter.

Hindari menggunakan beberapa string untuk membuat deskripsi yang lebih besar. String penyisipan harus diperlakukan sebagai data, bukan teks. Misalnya, dalam contoh berikut, pszString1 dan pszString2 tidak boleh digunakan sebagai string penyisipan untuk pszDescription.

LPSTR pszString1 = "successfully"; 
LPSTR pszString2 = "not"; 
LPSTR pszDescription = "The user was %1 added to the database.";

Dalam contoh berikut, adalah tepat untuk menggunakan pszString1 atau pszString2 untuk string penyisipan dalam pszDescription.

LPSTR pszString1 = "c:\\testapp1.c"; 
LPSTR pszString2 = "c:\\testapp2.c"; 
LPSTR pszDescription = "Access denied. Attempted to open the file %1."