ASP.NET Web API 2'de izleme

Web tabanlı bir uygulamada hata ayıklamaya çalışırken, iyi bir iz günlükleri kümesinin yerini tutabilecek bir şey yoktur. Bu öğreticide, ASP.NET Web API'sinde izlemeyi etkinleştirme gösterilmektedir. Web API çerçevesinin denetleyicinizi çağırmadan önce ve sonra neler yaptığını izlemek için bu özelliği kullanabilirsiniz. Kendi kodunuzu izlemek için de kullanabilirsiniz.

Öğreticide kullanılan yazılım sürümleri

Web API'sinde System.Diagnostics İzlemeyi Etkinleştirme

İlk olarak yeni bir ASP.NET Web Uygulaması projesi oluşturacağız. Visual Studio'da, Dosyamenüsünden Yeni Proje'yi> seçin. Şablonlar, Web altında ASP.NET Web Uygulaması seçin.

Yeni proje iletişim kutusunun resmi

Web API proje şablonunu seçin.

Seçilen web A P I görüntüsü

Araçlar menüsünde NuGet Paket Yöneticisi'ni ve ardından Paket Yönetimi Konsolu'nu seçin.

Paket Yöneticisi Konsolu penceresinde aşağıdaki komutları yazın.

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

İlk komut en son Web API'sini izleme paketini yükler. Ayrıca temel Web API'leri paketlerini de güncelleştirir. İkinci komut, WebApi.WebHost paketini en son sürüme güncelleştirir.

Uyarı

Web API'sinin belirli bir sürümünü hedeflemek istiyorsanız, izleme paketini yüklerken -Version bayrağını kullanın.

App_Start klasöründeki dosya WebApiConfig.cs açın. Register yöntemine aşağıdaki kodu ekleyin.

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

        // Other configuration code not shown.
    }
}

Bu kod , SystemDiagnosticsTraceWriter sınıfını Web API işlem hattına ekler. SystemDiagnosticsTraceWriter sınıfı, izlemeleri System.Diagnostics.Trace'e yazar.

İzlemeleri görmek için hata ayıklayıcıda uygulamayı çalıştırın. Tarayıcıda /api/values adresine gidin.

Değiştirilen U R L'yi gösteren görüntü

İzleme ifadeleri, Visual Studio üzerindeki Çıkış penceresine yazılır. ( Görünümmenüsünden Çıkış'ı seçin).

İzleme ifadelerinin görüntüsü

SystemDiagnosticsTraceWriter, izlemeleri System.Diagnostics.Trace'e yazdığından, ek izleme dinleyicilerini kaydedebilirsiniz; örneğin, izlemeleri bir günlük dosyasına yazmak için. İzleme yazarları hakkında daha fazla bilgi için MSDN'de İzleme Dinleyicileri konusuna bakın.

SystemDiagnosticsTraceWriter'ı Yapılandırma

Aşağıdaki kod, izleme yazıcısını yapılandırmayı gösterir.

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

Denetleyebileceğiniz iki ayar vardır:

  • IsVerbose: False olduğunda, her iz en az bilgi içerir. Eğer doğruysa, izlemeler daha fazla bilgi içerir.
  • MinimumLevel: En düşük izleme düzeyini ayarlar. İzleme düzeyleri sırasıyla Hata Ayıklama, Bilgi, Uyarı, Hata ve Ölümcül düzeylerdir.

Web API Uygulamanıza İzleme Ekleme

İzleme yazıcısı eklemek, Web API işlem hattı tarafından oluşturulan izlemelere anında erişmenizi sağlar. Kendi kodunuzu izlemek için izleme yazıcısını da kullanabilirsiniz:

using System.Web.Http.Tracing;

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

        // ...
    }
}

İzleme yazıcısını almak için HttpConfiguration.Services.GetTraceWriter'ı çağırın. Bir denetleyiciden bu yönteme ApiController.Configuration özelliği aracılığıyla erişilebilir.

İzleme yazmak için doğrudan ITraceWriter.Trace yöntemini çağırabilirsiniz, ancak ITraceWriterExtensions sınıfı daha kolay olan bazı uzantı yöntemlerini tanımlar. Örneğin, yukarıda gösterilen Bilgi yöntemi, izleme düzeyi Bilgi ile bir izleme oluşturur.

Web API İzleme Altyapısı

Bu bölümde, Web API'si için özel bir izleme yazıcının nasıl yazıldığı açıklanmaktadır.

Microsoft.AspNet.WebApi.Tracing paketi, Web API'sindeki daha genel bir izleme altyapısının üzerine kurulmuştur. Microsoft.AspNet.WebApi.Tracing yerine NLog veya log4net gibi başka bir izleme/günlük kitaplığını da takabilirsiniz.

İzlemeleri toplamak için ITraceWriter arabirimini uygulayın. Basit bir örnek aşağıda verilmiştir:

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);
    }
}

ITraceWriter.Trace yöntemi bir izleme oluşturur. Çağıran bir kategori ve izleme düzeyi belirtir. Kategori, kullanıcı tanımlı herhangi bir dize olabilir. İzleme uygulamanız aşağıdakileri yapmalıdır:

  1. Yeni bir TraceRecord oluşturun. Gösterildiği gibi istek, kategori ve izleme düzeyiyle başlatın. Bu değerler çağıran tarafından sağlanır.
  2. traceAction temsilcisini çağırın. Bu temsilci içinde, çağıranın TraceRecord'un geri kalanını doldurması gereklidir.
  3. İstediğiniz günlükleme tekniğini kullanarak TraceRecord'u oluşturun. Burada gösterilen örnek yalnızca System.Diagnostics.Trace'i çağırır.

İzleme Yazıcısını Ayarlama

İzlemeyi etkinleştirmek için Web API'sini ITraceWriter uygulamanızı kullanacak şekilde yapılandırmanız gerekir. Bunu aşağıdaki kodda gösterildiği gibi HttpConfiguration nesnesi aracılığıyla yaparsınız:

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

Yalnızca bir izleme yazıcısı etkin olabilir. Varsayılan olarak, Web API hiçbir iş yapmayan bir "no-op" izleyici ayarlar. (İzleme kodunun izleme yazmadan önce izleme yazıcısının null olup olmadığını denetlemesi gerekmemesi için "no-op" izleyicisi vardır.)

Web API İzleme Nasıl Çalışır?

Web API'sinde izleme bir cephe deseni kullanır: İzleme etkinleştirildiğinde, Web API'sinin istek işlem hattının çeşitli bölümlerini izleme çağrıları gerçekleştiren sınıflarla sarmalar.

Örneğin, bir denetleyici seçerken işlem hattı IHttpControllerSelector arabirimini kullanır. İzleme etkinleştirildiğinde, işlem hattı IHttpControllerSelector implementasyonu içeren ancak gerçek uygulamaya yönlendirme yapan bir sınıf ekler.

Web API izleme, fasad deseni kullanır.

Bu tasarımın avantajları şunlardır:

  • İzleme yazıcısı eklemezseniz, izleme bileşenleri örneklenmez ve performansı etkilemez.
  • IHttpControllerSelector gibi varsayılan hizmetleri kendi özel uygulamanızla değiştirirseniz, izleme sarmalayıcı nesnesi tarafından yapıldığından izleme etkilenmez.

Ayrıca, varsayılan ITraceManager hizmetini değiştirerek Web API izleme çerçevesinin tamamını kendi özel çerçevenizle değiştirebilirsiniz:

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

İzleme sisteminizi başlatmak için ITraceManager.Initialize uygulayın. Bunun, Web API'sinde yerleşik olan tüm izleme kodu da dahil olmak üzere izleme çerçevesinin tamamının yerini aldığına dikkat edin.