Bagikan melalui


Pelacakan di ASP.NET Web API 2

Ketika Anda mencoba men-debug aplikasi berbasis web, tidak ada pengganti untuk serangkaian log jejak yang baik. Tutorial ini menunjukkan cara mengaktifkan pelacakan di ASP.NET Web API. Anda dapat menggunakan fitur ini untuk melacak apa yang dilakukan kerangka kerja Web API sebelum dan sesudah memanggil pengontrol Anda. Anda juga dapat menggunakannya untuk melacak kode Anda sendiri.

Versi perangkat lunak yang digunakan dalam tutorial

Aktifkan Pelacakan System.Diagnostics di API Web

Pertama, kita akan membuat proyek ASP.NET Web Application baru. Di Visual Studio, dari menu File, pilihProyekBaru>. Di bawah Templat, Web, pilih aplikasi web ASP.NET.

Gambar kotak dialog proyek baru

Pilih templat proyek API Web.

Gambar web A P I dipilih

Dari menu Alat , pilih NuGet Package Manager, lalu Package Manage Console.

Di jendela Konsol Manajer Paket, ketik perintah berikut.

Install-Package Microsoft.AspNet.WebApi.Tracing
Update-Package Microsoft.AspNet.WebApi.WebHost

Perintah pertama menginstal paket pelacakan Web API terbaru. Ini juga memperbarui paket API Web inti. Perintah kedua memperbarui paket WebApi.WebHost ke versi terbaru.

Catatan

Jika Anda ingin menargetkan versi WEB API tertentu, gunakan bendera -Version saat Anda menginstal paket pelacakan.

Buka file WebApiConfig.cs di folder App_Start. Tambahkan kode berikut ke metode Register .

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // New code
        config.EnableSystemDiagnosticsTracing();

        // Other configuration code not shown.
    }
}

Kode ini menambahkan kelas SystemDiagnosticsTraceWriter ke alur API Web. Kelas SystemDiagnosticsTraceWriter menulis jejak ke System.Diagnostics.Trace.

Untuk melihat jejak, jalankan aplikasi di debugger. Di browser, buka /api/values.

Gambar yang menampilkan U R L yang dimodifikasi

Pernyataan pelacakan ditulis ke jendela Output di Visual Studio. (Dari menu Tampilan , pilih Output).

Gambar pernyataan pelacakan

Karena SystemDiagnosticsTraceWriter menulis jejak ke System.Diagnostics.Trace, Anda dapat mendaftarkan pendengar jejak tambahan; misalnya, untuk menulis jejak ke file log. Untuk informasi selengkapnya tentang pelacakan penulis, lihat topik Pelacakan Pendengar di MSDN.

Mengonfigurasi SystemDiagnosticsTraceWriter

Kode berikut menunjukkan cara mengonfigurasi penulis jejak.

SystemDiagnosticsTraceWriter traceWriter = config.EnableSystemDiagnosticsTracing();
traceWriter.IsVerbose = true;
traceWriter.MinimumLevel = TraceLevel.Debug;

Ada dua pengaturan yang dapat Anda kontrol:

  • IsVerbose: Jika false, setiap jejak berisi informasi minimal. Jika true, jejak menyertakan informasi selengkapnya.
  • MinimumLevel: Mengatur tingkat pelacakan minimum. Tingkat pelacakan, secara berurutan, adalah Debug, Info, Peringatan, Kesalahan, dan Fatal.

Menambahkan Jejak ke Aplikasi API Web Anda

Menambahkan penulis jejak memberi Anda akses langsung ke jejak yang dibuat oleh alur API Web. Anda juga dapat menggunakan penulis pelacakan untuk melacak kode Anda sendiri:

using System.Web.Http.Tracing;

public class ProductsController : ApiController
{
    public HttpResponseMessage GetAllProducts()
    {
        Configuration.Services.GetTraceWriter().Info(
            Request, "ProductsController", "Get the list of products.");

        // ...
    }
}

Untuk mendapatkan penulis jejak, hubungi HttpConfiguration.Services.GetTraceWriter. Dari pengontrol, metode ini dapat diakses melalui properti ApiController.Configuration .

Untuk menulis jejak, Anda dapat memanggil metode ITraceWriter.Trace secara langsung, tetapi kelas ITraceWriterExtensions mendefinisikan beberapa metode ekstensi yang lebih ramah. Misalnya, metode Info yang ditunjukkan di atas membuat jejak dengan Info tingkat pelacakan.

Infrastruktur Pelacakan API Web

Bagian ini menjelaskan cara menulis penulis jejak kustom untuk Web API.

Paket Microsoft.AspNet.WebApi.Tracing dibangun di atas infrastruktur pelacakan yang lebih umum di Api Web. Alih-alih menggunakan Microsoft.AspNet.WebApi.Tracing, Anda juga dapat mencolokkan beberapa pustaka pelacakan/pengelogan lainnya, seperti NLog atau log4net.

Untuk mengumpulkan jejak, terapkan antarmuka ITraceWriter . Berikut contoh sederhana.

public class SimpleTracer : ITraceWriter
{
    public void Trace(HttpRequestMessage request, string category, TraceLevel level, 
        Action<TraceRecord> traceAction)
    {
        TraceRecord rec = new TraceRecord(request, category, level);
        traceAction(rec);
        WriteTrace(rec);
    }

    protected void WriteTrace(TraceRecord rec)
    {
        var message = string.Format("{0};{1};{2}", 
            rec.Operator, rec.Operation, rec.Message);
        System.Diagnostics.Trace.WriteLine(message, rec.Category);
    }
}

Metode ITraceWriter.Trace membuat jejak. Pemanggil menentukan kategori dan tingkat pelacakan. Kategori dapat berupa string yang ditentukan pengguna. Implementasi Trace Anda harus melakukan hal berikut:

  1. Buat TraceRecord baru. Inisialisasi dengan tingkat permintaan, kategori, dan pelacakan, seperti yang ditunjukkan. Nilai-nilai ini disediakan oleh pemanggil.
  2. Panggil delegasi traceAction . Di dalam delegasi ini, penelepon diharapkan untuk mengisi sisa TraceRecord.
  3. Tulis TraceRecord, menggunakan teknik pengelogan apa pun yang Anda suka. Contoh yang ditunjukkan di sini hanya memanggil ke System.Diagnostics.Trace.

Mengatur Trace Writer

Untuk mengaktifkan pelacakan, Anda harus mengonfigurasi WEB API untuk menggunakan implementasi ITraceWriter Anda. Anda melakukan ini melalui objek HttpConfiguration , seperti yang ditunjukkan dalam kode berikut:

public static void Register(HttpConfiguration config)
{
    config.Services.Replace(typeof(ITraceWriter), new SimpleTracer());
}

Hanya satu penulis jejak yang dapat aktif. Secara default, Web API menetapkan pelacak "no-op" yang tidak melakukan apa pun. (Pelacak "no-op" ada sehingga kode pelacakan tidak perlu memeriksa apakah penulis jejak null sebelum menulis jejak.)

Cara Kerja Pelacakan API Web

Pelacakan di Web API menggunakan pola fasad : Saat pelacakan diaktifkan, Web API membungkus berbagai bagian alur permintaan dengan kelas yang melakukan panggilan pelacakan.

Misalnya, saat memilih pengontrol, alur menggunakan antarmuka IHttpControllerSelector . Dengan pelacakan diaktifkan, alur menyisipkan kelas yang mengimplementasikan IHttpControllerSelector tetapi memanggil ke implementasi nyata:

Pelacakan API Web menggunakan pola fasad.

Manfaat dari desain ini meliputi:

  • Jika Anda tidak menambahkan penulis jejak, komponen pelacakan tidak dibuat dan tidak memiliki dampak performa.
  • Jika Anda mengganti layanan default seperti IHttpControllerSelector dengan implementasi kustom Anda sendiri, pelacakan tidak terpengaruh, karena pelacakan dilakukan oleh objek pembungkus.

Anda juga dapat mengganti seluruh kerangka kerja pelacakan API Web dengan kerangka kerja kustom Anda sendiri, dengan mengganti layanan ITraceManager default:

config.Services.Replace(typeof(ITraceManager), new MyTraceManager());

Terapkan ITraceManager.Initialize untuk menginisialisasi sistem pelacakan Anda. Ketahuilah bahwa ini menggantikan seluruh kerangka kerja pelacakan, termasuk semua kode pelacakan yang disertakan dalam Web API.