Bagikan melalui


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.