Makale Özeti

Tracing web uygulamasının çalışma zamanındaki işlemler ile ilgili bilgilendirici mesajlar almayı sağlar. Bu mesajlar programcıya problemleri gidermede, performans analizinde yardımcı olur.

Makale

 

ASP.NETde TRACE

 

Nedir?

Tracing web uygulamasının çalışma zamanındaki işlemler ile ilgili bilgilendirici mesajlar almayı sağlar. Bu mesajlar programcıya problemleri gidermede, performans analizinde yardımcı olur.  .NET  programcıya tracing işlemi için iki adet nesne sağlar. Bunlar ; Trace ve Debug nesneleridir.

 

Web uygulamasında Debug ve Trace nesnelerini kullanarak, şu işlemler yapılabilir:

 

  • Değişkenlerin taşıdığı değerleri çıkarabilme
  • Belirli şartlar sağlandığı zaman değişkenlerin değerlerini çıkarabilme
  • Kod bloklarının çalışma akışını takip etme, doğru sıra ile çalıştığını kontrol edebilme

 

Trace nesnesi bilgileri bir web sayfasında görüntülemeyi veya hafızaya kaydetmeyi sağlar.

ASP’nin önceki versiyonlarında web uygulamasının izlemek için Response.Write kullanılırdı. Bu durumda uygulama kullanıcıların hizmetine sokulmadan önce tüm bu Response.Write deyimleri silinmeli veya yorum satırı haline getirilmeliydi.  ASP.NET ile bu işlemi Trace nesnesi ile yaptığınız takdirde tüm uygulamadaki trace durumunu tek bir satırlık Web.Config değişikliği ile kapalı duruma getirebilirsiniz.

 

Debug nesnesi hata ayıklama bilgilerini vermesi için kullanılabilir. Debug nesnesini kullanan deyimler sadece Debug modunda derlendikleri zaman ve Visual Studio .NET ile çalışırlar. Release modda derlenen assembly koduna eklenmez, yok sayılırlar. Debug nesnesinin kullanılması uygulama kullanıcıların hizmetine açıldığında (release mod) Debug komutlarının göz ardı edilmesi sebebiyle uygulamanın son sürüm dağıtımında performans ve kod boyutunda avantaj sağlar. Debug nesnesinin mesajları Visual Studio .NET Output penceresinde görüntülenir.

 

Not: Debug nesnesini kullanmak için code-behind dosyasına System.Diagnostics Namespace’ i (ad uzayı)  eklenmelidir.

Tracing İşlemini Etkinleştirmek

 

Trace nesnesini kullanırken mesajları doğrudan ASP.NET sayfasının sonuna ekleyebilir veya trace bilgisinin hafızada kaydedilmesini sağlayabilirsiniz.

 

Sayfa Düzeyinde Trace Etkinleştirilmesi

Sayfa bazında trace yöntemi kullanıldığında tüm trace mesajları web sayfasının sonuna bir tablo olarak eklenir. Bu şekilde sayfa ve trace mesajlarını aynı anda görüntüleyerek hızlı bir izleme işlemi yapılabilir.

 

Trace işlemini sayfa bazında açmak için istenen sayfaların @Page etiketine Trace özelliği eklenip değeri true yapılmalıdır.

 

 

Yukarıdaki şekilde bir sayfada tracing etkin duruma getirildiğinde Trace.Write ile yazılan tüm deyimler ve diğer sayfa bilgileri sayfanın altında listelenir. Trace işlemine ihityacınız kalmadığında tüm Trace.Write methodlarını silmek yerine tracing işlemini pasif duruma getirebilirsiniz.

 

 

 

Uygulama Düzeyinde Trace Etkinleştirilmesi

 

Tracing yöntemini uygulama düzeyinde etkin duruma getirildiğinde uygulamadaki tüm sayfalar için tracing etkin duruma getirilmiş olur. Uygulama bazında trace yapmak programcıya esneklik ve hız kazandırmaktadır. Örneğin; sayfa düzeyinde tracing kullanılırken trace mesajları sadece sayfaların sonuna eklenirken, uygulama düzeyinde tracing kullanılırken trace mesajları ister sayfanın sonuna eklenebilir, istenirse hafızaya yazılabilir. Hafızaya yazılan trace mesajlarını görüntülemek için trace.axd trace görüntüleyicisi kullanılır.

 

Uygulama düzeyinde Trace’ i etkin duruma getirmek için web.config dosyasında aşağıdaki şekilde değişiklik yapılmalıdır.

 

 

Yukarıdaki web.config dosyası tanımlaması ile uygulamadaki tüm sayfalarda tracing etkin duruma getirilir. Bu durumda trace bilgisi sadece trace.axd ile görüntülenir.

 

Eğer trace bilgisinin sayfa sonunda da gözükmesi istenirse trace elementinin pageOutput özelliği true  yapılır.

 

 

pageOutput özelliği standart olarak false değerine sahiptir. Yani trace bilgileri trace.axd aracılığı ile erişilebilecek şekilde hafızaya yazılır.

 

Trace bilgilerinin sadece ASP.NET sayfalarının sunumunun yapıldığı bilgisayardan görüntülenbilmesi istenirse localOnly özelliği kullanılır. Bu özellik true olduğu zaman trace bilgisine sadece sunucu bilgisayarı kullanan kullanıcılar(programcı) erişebilir. localOnly özelliği varsayılan olarak true değerini alır.

 

 

Trace mesajlarını görüntülerken istenilen koşullarda sıralanması sağlanabilir. Trace mesajlarını sıralamak için iki değer vardır. Bunlar traceMode özelliğinin SortByTime ve SortByCategory değerleridir.

 

SortByTime: Trace mesajlarını zaman sırasına göre listeler.

SortByCategory: Trace mesajlarını kategori sırasına göre listeler.

 

Trace bilgisinin kaydedileceği istek sayısını kısıtlamak için requestLimit özelliği kullanılır. Belirlenen sayıdan fazla istek geldiği zaman tracing pasif duruma getirilir.

 

    

Trace Nesnesi’ nin Kullanımı

 

Trace bilgilerini sayfanın sonuna veya hafızaya yazdırmak için Trace.Write ve Trace.Warn metodları kullanılabilir. Trace nesnesinin etkin veya pasif olma durumunu IsEnabled özelliği ile program kodu ile değiştirilebilir.

 

Trace.Write ve Trace.Warn Metodları

Trace.Write ve Trace.Warn metodları ile Trace mesajları yazdırılır. Trace.Write ve Trace.Warn metodları hemen hemen aynı işlemi yaparlar. Tek fark Trace.Warn metodunun mesajları kırmızı renk ile yazdırmasıdır.

 

Trace.Write ve Trace.Warn metodları trace mesajlarının istenilen ilgili kategori altına yazılmasına olanak sağlar.  Bu  trace bilgilerini analiz aşamasında programcıya kolaylık sağlar.

 

Trace.Write("kat1", "mesaj1")

Trace.Write("kat1", "mesaj2")

Trace.Write("mesaj3")

Trace.Warn("kat2", "mesaj4")

 

 

 

Yukarıdaki kod parçası ile 4 tane Trace mesajı yazılıyor. kat1 kategorisi içerisine iki mesaj yazılıyor. Kategori belirtilmeden 1 mesaj yazılıyor. Daha sonra kat2 kategorisine bir adet uyarı mesajı kırmızı ile vurgulanarak yazılıyor.

Uygulama Düzeyinde Trace Kullanımı

 

Uygulama düzeyinde trace yapılabilmesi için web.config dosyasında gerekli düzenlemelerin yapılması gerekir. Uygulama  düzeyinde trace etkin duruma getirildiğinde trace bilgisi sayfanın altında bir tablo olarak gösterilebilir ve trace görüntüleyicisi (trace.axd) aracılığıyla da görüntülenebilir.

 

Trace’ in etkinliği için hem uygulama düzeyinde, hem de sayfa düzeyinde ayarlama yapılabilir. Bu durumda sayfa web.config dosyasında yapılan ayarı miras alır, fakat sayfadaki @Page etiketinde yapılan bir tanımlama var ise sayfada tanımlanan durum geçerli olur.

 

Örneğin uygulamanızı uygulama düzeyinde (web.config ile) trace özelliğini etkin duruma getirdiniz.  Fakat aynı uygulama  içerisinde sadece bir sayfada trace işlemini pasif duruma getirmek istiyorsunuz. Bunun için istenilen sayfanın @Page etiketine trace=”false” özelliğini ekleyerek, tüm uygulamada sadece o sayfanın trace özelliğini kapatmış olursunuz.

 

Uygulama Ayarı

Sayfa Ayarı

Sayfa Sonucu

Trace=True veya
Trace=False

Trace=True

Trace sayfada etkin durumda.

Trace=True veya
Trace=False

Trace=False

Trace sayfada pasif durumda.

Trace=True

(ayarlanmamış)

Trace sayfada etkin durumda.

 

Trace Mesajlarının Görüntülenmesi

 

Uygulama düzeyinde trace izlemesi yaparken trace mesajlarını hem sayfanın sonunda hemde trace.axd görüntüleyicisi ile görüntülenebilir. Mesajların nasıl görüntüleneceğini pageOutput özelliği ile belirleyebiliriz.  pageOutput varysaılan olarak false değerini alır.

 

 

Yukarıdaki kod parçası ile trace mesajlarının sayfaya yazdırılmaması ayarlanıyor. Bu durumda trace mesajlarına trace.axd trace görüntüleyicisi ile ulaşılır.

 

Trace.axd görüntüleyicisine ulaşmak için aşağıdaki şekilde bir kullanım gerekir.

 

http://sunucuismi/projeismi/trace.axd

 

sunucuismi yerine uygulamanın bulunduğu web sunucusunun ismini, projeismi yerine ise uygulamanızın bulunduğu dizini yazmalısınız. Trace.axd isminde bir dosya aslında yoktur. .NET Framework machine.config dosyasında yapılan ve sunucu üzerindeki tüm uygulamaları etkileyen ayar dosyasında httpHandlers düğümündeki tanımlamalar ile trace.axd ismindeki dosyalara gelen istekleri System.Web.Handlers.TraceHandler sınıfı ile yorumlar.

 

Not: localOnly özelliği ile belirlenen trace ayarları trace.axd trace görüntüleyicisi içinde geçerlidir. Eğer localOnly özelliği true olarak belirlenmiş ise trace.axd dosyası yanlızca sunucu bilgisayar kullanarak erişilebilir.

 

Trace Sonuçları Tablosu

 

Trace mesajlarının yer aldığı tabloda programcı tarafından Trace.Write ve Trace.Warn metodları ile yazdırılan mesajlar ile birlikte sayfanın işlem sürecinde yazdırılan diğer trace mesajları yer alır.

 

Trace mesajları tablosunda yer alan mesajları çeşitli kategorilere ayrılmıştır.  Bu kategoriler şunlardır.

 

Request Details: Sayfaya gelen istek (request) hakkında bilgiler içerir. Oturum tanımlama bilgisi (Session ID),  istek zamanı (Time of Request), istek tipi(Request Type), istek kodlaması(Request Encoding) gibi bilgiler yer alır.

 

Trace Information:  Standart ve programcı tarafından yazılan (Trace.Write ve Trace.Warn ile) trace mesajlarını içerir. From First(s) sütununda trace mesajına kadar sayfanın en  başıdan itibaren geçirdiği süreyi, From Last(s) sütunu ise en son trace mesajından sonra ne kadar süre geçtiğini gösterir.

 

Control Tree: Sayfada yer alan bütün kontrollerin listesini ve bu kontrollerinin boyutlarını gösterir.

 

Cookies Collection: Kullanılan çerezlerin(cookie) listesini, değerlerini ve boyutlarını verir.

 

Headers Collection: HTTP başlıklarının (header) listesini verir.

 

Server Variables: Tüm sunucu değişkenleri (Server Variables) listesini ve değişkenlerini verir.

 

Bileşenler İçerisinden Trace

 

Web Form Uygulamasından çağrılacak bir bileşen (component) programlanırken, bileşen içerisinden trace mesajları yazılabilir.

 

Bileşenler içerisinden trace mesajları yazabilmek için System.Web Namespace’ini uygulamaya dahil (import) etmek gerekir.

 

Bileşen sınfı(class) içerisinde trace mesajı yazdırmak için aşağıdaki gibi bir deyim yazılmalıdır.

 

HttpContext.Current.Trace.Write("bileşen", "bileşenden gelen mesaj")

 

HttpContext.Current ile o anki isteğin(request) HTTP ile alakalı özelliklerine (Session, Application, Response gibi) erişilebilir. HttpContext.Current.Trace sınıfı ile bir Trace nesnesinin code-behind dosyasından erişebileceğimiz tüm elemanlarına erişebiliriz. IsEnabled özelliği gibi.

 

ASP.NET Trace yetenekleri ile uygulamanızın problemlerini gidermede, performans analizinde daha etkin çalışabilirsiniz.

 

Cengiz HAN

Microsoft ASP.NET MVP

cengiz@cengizhan.com