Jejak Diagnostik
Jejak adalah penerbitan pesan tertentu yang dihasilkan selama eksekusi aplikasi. Saat menggunakan pelacakan, Anda harus memiliki mekanisme untuk mengumpulkan dan merekam pesan yang dikirim. Pesan jejak diterima oleh pendengar. Pendengar bertujuan mengumpulkan, menyimpan, dan merutekan pesan pelacakan. Pendengar mengarahkan output penelusuran ke target yang sesuai, seperti file log, jendela, atau teks.
Salah satu pendengar tersebut, DefaultTraceListener, secara otomatis dibuat dan diinisialisasi saat pelacakan diaktifkan. Jika Anda ingin output jejak diarahkan ke sumber tambahan apa pun, Anda harus membuat dan menginisialisasi pendengar jejak tambahan. Pendengar yang Anda buat harus mencerminkan kebutuhan individu Anda. Misalnya, Anda mungkin menginginkan rekaman teks dari semua output jejak. Dalam hal ini, Anda akan membuat pendengar yang menulis semua output ke file teks baru saat diaktifkan. Di sisi lain, Anda mungkin hanya ingin melihat output selama eksekusi aplikasi. Dalam hal ini, Anda dapat membuat pendengar yang mengarahkan semua output ke jendela konsol. EventLogTraceListener dapat mengarahkan output pelacakan ke log peristiwa, dan TextWriterTraceListener dapat menulis output pelacakan ke aliran.
Mengaktifkan Penelusuran
Untuk mengaktifkan pelacakan selama pemrosesan transaksi, Anda harus mengedit file konfigurasi aplikasi Anda. Berikut adalah contohnya.
<configuration>
<system.diagnostics>
<sources>
<source name="System.Transactions" switchValue="Warning">
<listeners>
<add name="tx"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "tx.log" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
Pelacakan System.Transactionsditulis ke sumber bernama "System.Transactions". Anda dapat menggunakan add
untuk menentukan nama dan jenis pendengar jejak yang ingin Anda gunakan. Dalam contoh konfigurasi kami, kita menamai Pendengar "tx" dan menambahkan pendengar pelacakan .NET Framework standar (XmlWriterTraceListener) sebagai jenis yang ingin kita gunakan. Gunakan initializeData
untuk mengatur nama file log untuk pendengar tersebut. Selain itu, Anda dapat mengganti jalur yang sepenuhnya memenuhi syarat untuk nama file sederhana.
Setiap jenis pesan pelacakan diberi tingkat untuk menunjukkan tingkat kepentingannya. Jika tingkat pelacakan domain aplikasi sama atau lebih rendah dari tingkat jenis peristiwa, pesan tersebut dihasilkan. Tingkat pelacakan dikontrol oleh pengaturan switchValue
dalam file konfigurasi. Tingkat yang terkait dengan pesan pelacakan diagnostik ditentukan dalam tabel berikut.
Tingkat Jejak | Deskripsi |
---|---|
Kritis | Kegagalan serius, seperti berikut ini, telah terjadi: - Kesalahan yang dapat menyebabkan kehilangan langsung dalam fungsionalitas pengguna. - Peristiwa yang mengharuskan administrator mengambil tindakan untuk menghindari hilangnya fungsionalitas. - Kode menggantung. - Tingkat pelacakan ini juga dapat memberikan konteks yang memadai untuk menafsirkan pelacakan penting lainnya. Ini dapat membantu mengidentifikasi urutan operasi yang menyebabkan kegagalan serius. |
Error | Terjadi kesalahan (misalnya, konfigurasi atau perilaku jaringan yang tidak valid) yang dapat mengakibatkan hilangnya fungsionalitas pengguna. |
Peringatan | Kondisi ada yang kemudian dapat mengakibatkan kesalahan atau kegagalan kritis (misalnya, alokasi gagal atau mendekati batas). Pemrosesan kesalahan normal dari kode pengguna (misalnya, transaksi dibatalkan, batas waktu, autentikasi gagal) juga dapat menghasilkan peringatan. |
Informasi | Pesan yang bermanfaat untuk memantau dan mendiagnosis status sistem, mengukur performa, atau membuat profil dihasilkan. Ini dapat mencakup peristiwa seumur hidup transaksi dan pendaftaran, seperti transaksi yang dibuat atau dilakukan, persimpangan batas yang signifikan, atau alokasi sumber daya yang signifikan. Pengembang kemudian dapat menggunakan informasi tersebut untuk perencanaan kapasitas dan manajemen performa. |
Kode Pelacakan
Tabel berikut mencantumkan kode pelacakan yang dihasilkan oleh infrastruktur System.Transactions. Termasuk dalam tabel adalah pengidentifikasi kode pelacakan, tingkat enumerasi EventType untuk pelacakan, dan data tambahan yang terkandung dalam TraceRecord untuk pelacakan. Selain itu, tingkat pelacakan jejak yang sesuai juga disimpan di TraceRecord.
TraceCode | EventType | Data tambahan di TraceRecord |
---|---|---|
TransactionCreated | Info | TransactionTraceId |
TransactionPromoted | Info | TransactionTraceId Lokal, TransactionTraceId Terdistribusi |
EnlistmentCreated | Info | TransactionTraceId, EnlistmentTraceId, EnlistmentType (durable/volatile), EnlistmentOptions |
EnlistmentCallbackNegative | Peringatan | TransactionTraceId, EnlistmentTraceId, Panggilan balik (forcerollback/aborted/indoubt) |
TransactionRollbackCalled | Peringatan | TransactionTraceId |
TransactionAborted | Peringatan | TransactionTraceId |
TransactionInDoubt | Peringatan | TransactionTraceId |
TransactionScopeCreated | Info | TransactionScopeResult, yang dapat menjadi berikut: - Transaksi baru. - Transaksi lulus. - Transaksi dependen lulus. - Menggunakan transaksi saat ini. - Tidak ada transaksi. TransactionTraceId baru saat ini |
TransactionScopeDisposed | Info | TransactionTraceId "perkiraan" transaksi saat ini dari cakupan. |
TransactionScopeIncomplete | Peringatan | TransactionTraceId "perkiraan" transaksi saat ini dari cakupan. |
TransactionScopeNestedIncorrectly | Peringatan | TransactionTraceId "perkiraan" transaksi saat ini dari cakupan. |
TransactionScopeCurrentTransactionChanged | Peringatan | TransactionTraceId saat ini sebelumnya, TransactionTraceId lainnya |
TransactionScopeTimeout | Peringatan | TransactionTraceId "perkiraan" transaksi saat ini dari cakupan. |
DependentCloneCreated | Info | TransactionTraceId, jenis transaksi dependen yang dibuat (RollbackIfNotComplete/BlockCommitUntilComplete) |
DependentCloneComplete | Info | TransactionTraceId |
RecoveryComplete | Info | Resource Manager GUID (dari dasar) |
Daftar ulang | Info | Resource Manager GUID (dari dasar) |
TransactionSerialized | Info | TransactionTraceId. |
TransactionException | Error | Pesan pengecualian |
InvalidOperationException | Error | Pesan pengecualian |
InternalError | Kritis | Pesan pengecualian |
TransferEvent | Ketika transaksi dideserialisasi, atau dipromosikan dari transaksi System.Transactions ke transaksi terdistribusi, ActivityID saat ini dari ExecutionContext dan ID transaksi terdistribusi ditulis. Ketika DTC memanggil kembali ke kode terkelola, ID transaksi terdistribusi ditetapkan sebagai ActivityID di ExecutionContext selama durasi panggilan balik. |
|
ConfiguredDefaultTimeoutAdjusted | Peringatan | Tidak ada data tambahan |
TransactionTimeout | Peringatan | TransactionTraceId dari transaksi yang kehabisan waktu. |
Skema XML untuk setiap item data tambahan sebelumnya memiliki format berikut.
TransactionTraceIdentifier
<TransactionTraceIdentifier>
<TransactionIdentifier >
string representation of transaction id
</TransactionIdentifier>
< CloneIdentifier >
the clone id number
</CloneIdentifier>
</TransactionTraceIdentifier>
EnlistmentTraceIdentifier
<EnlistmentTraceIdentifier>
<ResourceManagerId>
string form of guid
</ResourceManagerId>
<TransactionTraceIdentifier>
<TransactionIdentifier >
string representation of transaction id
</TransactionIdentifier>
<CloneIdentifier >
the clone id number
</CloneIdentifier>
<TransactionTraceIdentifier>
<EnlistmentIdentifier>
the enlistment id number
</EnlistmentIdentifier>
</EnlistmentTraceIdentifier>
Pengidentifikasi Resource Manager
<ResourceManagerId>
string form of guid
</ResourceManagerId>
Masalah Keamanan untuk Pelacakan
Saat Anda sebagai administrator mengaktifkan pelacakan, informasi sensitif mungkin ditulis ke log pelacakan yang dapat dilihat publik secara default. Untuk mengurangi kemungkinan ancaman keamanan, Anda harus mempertimbangkan untuk menyimpan log pelacakan di lokasi aman yang dikendalikan oleh izin akses sistem bersama dan file.