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 - Sukses
- 01 - Informasi
- 10 - Peringatan
- 11 - Kesalahan
-
C
-
Bit pelanggan. 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 Penampil Peristiwa menampilkan teks khusus peristiwa untuk peristiwa apa pun berdasarkan pengidentifikasi peristiwa. Semua deskripsi dilokalkan dan bergantung pada bahasa. Untuk informasi selengkapnya tentang membangun 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 entri sampel 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. NumStrings anggota strukturEVENTLOGRECORD menunjukkan jumlah string penyisipan. StringOffset anggota 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 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 FormatMessage kembali. 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 FormatMessage dikembalikan.
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, 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."