Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Sefer Algan
Sefer Algan
http://www.seferalgan.com
İletişme geçmek için tıklayın.
71 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  ASP.NET Sefer Algan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : ASP.NET
Yayınlanma Tarihi : 23.4.2003
Okunma Sayısı : 49678
Yorum Sayısı : 2     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 21.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 21.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 21.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 21.11.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
ASP.NET Sayfalarını İzleme(Trace)
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Bu makalede ASP,NET sayfalarının sayfa bazında ve uygulama bazında izlenmesi ve izlenme çıktılarının görüntülenmesine değineceğim. Ayrıca izleme çıktısına müdahale etmek için kullanılan TraceContext sınıfının işlevini ve üye elemanlarını da inleyeceğiz.

Profesyonel yazılım geliştiricilerin, uygulama geliştirirken en sık kullandıkları araçlardan birisi hata ayıklama araçlarıdır. Zira büyük çaplı projelerde yazılan kodların içinde kaybolmamak mükün değildir. Üstelik kodunuz eğer bir hata içeriyorsa işin içinden çıkamaz hale bile gelebilirsiniz. Bu tür durumlarda başvurabileceğimiz en güzel araç debugger dediğimiz hata ayıklayıcı araçlardır. ASP.NET, profesyonel yazılım geliştirmeyi web ortamına taşıdığı için eski ASP'de olmayan bir takım hata ayıklayıcı ve gözlemleyici programlara yada diğer bir deyimle araçlara ihtiyaç duyulur. Büyük çaplı ASP.NET uygulamaları geliştirirken sıkça başvuracağımız iki kavram vardır. Bunlardan birincisi ASP.NET sayfalarının izlenmesi(tracing) diğer ise .NET'in sağlamış olduğu hata ayıklama(debug) mekanizmasıdır. Bu makalede ASP.NET sayfalarının izlenmesi anlatılacaktır. ASP.NET'te hata ayıklama işlemi ise bu konudaki bir sonraki makalemin konusu olacaktır.

ASP.NET Sayfalarının İzlenmesi (Trace)

Eski ASP mantığında olmayan bir teknik olan sayfa izleme işlemi ASP.NET sayfaları hakkında çeşitli bilgileri geliştiriciye yada istenirse kullanıcıya vermek amacıyla kullanılan bir raporlama biçimidir. Peki bir sayfayı izlerken ne tip bilgiler elde ederiz? Aslında bu sorunun cevabını birazdan daha iyi anlayacağız ancak bir liste halinde ASP.NET sayfalar hakkında elde edebileceğimiz bilgileri sıralamakta fayda var.

  • İstek Detayları (Request Details ) : Bu bilgiler ile bir sayfanın web sunucudan istenirken kullandığı yöntemler verilir. Örneğin açılan oturumun kimliği,açılan oturuma özel olarak verilen kimlik numarası, şifreleme tekniğinin türü ve isteğin türü gibi bilgiler bu başlığa girer.

  • İzleme Bilgileri (Trace Information) : Sayfaların izlenmesi sırasında, izlenme işlemi ile ilgili bilgiler bu başlık altında toplanır. Örneğin izleme bilgilerinin elde edilme süresi, izleme işleminin kategorisi yada izleme ile ilgili ayrıntılı bilgiler bu başlıktadır.

  • Kontrol Ağacı(Control Tree) : ASP.NET sayfasına ait kaynak dosyada bulunan bütün kontrollerin isimleri, bu kontrollerin dönüştürülme süreleri ve kontrollerle ilgili ViewState boyutunun gösteren bilgiler bu başlık altındadır.

  • Çerez Koleksiyonu (Cookies Collection) : ASP.NET sayfasının sunucudan istendiği anda o sayfada kullanımı geçerli olan ve istekte bulunulan çerezlere(cookie) ait bilgiler bu başlığa girer.

  • Başlık Koleksiyonu (Headers Collection) : ASP.NET sayfasının istekte bulunulması sırasında bu isteğin bir parçası olan HTTP başlık bilgilerinin listesi bu başlık altına girer.

  • Form Koleksiyonu (Form Collection) : İstekte bulunulan sayfaya POST metodu ile gönderilmiş değişkenler ve değişkenlerin değerleri bu başlık altına girer.

  • Sorgu Dizgeleri Koleksiyonu (Querystring Collection) : İstekte bulunulan sayfaya GET metodu ile gönderilmiş değişkenler ve değişkenlerin değerleri bu başlık altına girer.

  • Sunucu Değişkenleri (Server Variables) : İstekte bulunulan sayfaya ilişkin sunucu değişkenlerin tamamı bu kapsama girer. ASP kullananların bildiği gibi REMOTE_HOST, REMOTE_ADDR gibi değişkenler sunucu değişkenleridir.

ASP.NET'te İki tür izleme metodu vardır. İlk önce sayfa bazında izleme işleminin nasıl olduğunu inceleyeceğiz. Ardından uygulama bazında izleme işlemine geçeceğiz.

Sayfa Bazında İzleme

Bir sayfaya ilişkin izleme bilgilerini görüntülemek için ilgili sayfadaki @Page yönergesinin Trace niteliğini sayfaya eklememiz gerekir. Daha önce bilgisayarınızda bulunan bir ASP.NET sayfasını yada Visual Studio.NET i kullanarak basit bir ASP.NET sayfası oluşturup @Page yönergesinin bulunduğu (directive) satırı aşağıdaki gibi değiştirin.

Not: Eğer trace özelliğini true olacak şekilde değiştirmezsek sayfa izleme çıktılarını elde edemeyiz.


<%@ Page trace="true" language="c#" Codebehind="default.aspx.cs" Inherits="Uygulama.Form1" AutoEventWireup="false" %>

Şimdi sayfaya istekte bulunarak izleme çıktısının orjinal sayfamıza nasıl eklendiğini inceleyelim. Aşağıdaki ekran görüntüsü sayfa izleme çıktısının benim bilgisayarımdaki bir uygulamaya ait default.aspx sayfasının izleme çıktılarını göstermektedir.



Sayfa bazında izleme işlemi genellikle geliştiriciye kolaylık sağlanması amacı ile yapılmaktadır. Bir sayfayı izlemeye açtığınızda sayfaya istekte bulunan bütün kullanıcılar izleme çıktılarını görebilir. Kullanıcıların izleme çıktısını görmesini istemiyorsanız birazdan göreceğimiz uygulama bazında izleme işlemini sadece yerel makine için(localhost) sınırlandırabilirsiniz.

Yukarıdaki ekran görüntüsünden de görüldüğü üzere herhangi bir kod yazmadan sayfanın bütün istek(request) bilgilerini düzgün bir şekilde raporladık. Bu işlem ilk başta ne işimize yarayacak diye endişe edebilirsiniz. Bu endişede şimdilik haklı olabilirsiniz ancak büyük bir ASP.NET uygulaması projesinde çalıştığınızda özellikle de birden fazla kişi ile beraber aynı proje üzerinde çalışıyorsanız izleme işleminin sağladığı kolaylıkları göreceksiniz.

Uygulama Bazında İzleme

İzleme işlemlerinin içinde en çok kullancağınız yöntem bir uygulamayı tümüyle izlemek olacaktır. Üstelik bu yöntem yukarıda anlatılan sayfa bazında izleme yöntemine göre bir çok ek özellik içerir. Bir uygulamayı izlemek için uygulamanın bulunduğu klasörde bulunan web.config isimli yapılandırma dosyasında değişiklik yapmak gerekecektir.

web.config dosyasını açıp aşağıdaki gibi değiştirin.


enabled="true"
requestLimit="20"
pageOutput="true"
traceMode="SortByTime"
localOnly="true"
/>

Not: Yukarıda web.config dosyasına ilişkin yapılan değişiklikler elemanının içinde kümelenmiş elemanı içinde yapılmalıdır. Yani Bu değişiklik aşağıdaki gibi olmalıdır.




    
        .
        .
        .
                 enabled="true"
        requestLimit="20"
        pageOutput="true"
        traceMode="SortByTime"
        localOnly="true"
        />
        .
        .
        .
    




Visual Studio.NET ile yeni bir ASP.NET uygulaması oluşturduğunuzda web.config dosyasında bulunan trace elemanının enabled niteliği false değerdedir. Bu niteliği true yapmanız uygulama düzeyinde izleme işlemini başlatmış olduğunuz anlamına gelir.

Web.config dosyasında yapılan değişiklikte en önemli nokta trace elemanının localOnly niteliğidir. Bu nitelik true olduğu takdirde uygulama düzeyinde izleme işlemi çıktısının sadece geliştiricinin kullandığı makinede görüntülenebileceği anlamına gelir. Varsayılan olarak bu nitelik true değerdedir. İzleme bilgilerinin kullanıcılar tarafından görülmesini istemiyorsanız bu niteliğin değerini false yapmanız gerekir.

Trace elemanının diğer niteliklerine ve alabileceği değerlere bakacak olursak;


  • enabled niteliği : Uygulama bazındaki izlemenin aktif olup olmadığını belirtir. Bu özellik ya true yada false değer almalıdır.

  • pageOutput niteliği : İzleme çıktılarının her sayfaya eklenip eklenmeyeceğini belirtir. Eğer bu nitelik true değerde ise izleme çıktısı web.config dosyasını ilgilendiren bütün ASP.NET dosyalarına eklenir. Böylece her sayfa için otomatik olarak sayfa düzeyi izleme işlemi yapmış oluruz. Eğer bu nitelik false değerde ise izleme çıktılarına birazdan göreceğimiz özel bi URL'yi kullanarak erişebiliriz.

  • requestLimit niteliği : Uygulama düzeyinde izleme yapılacağı sırada izleme işleminin kaç sayfa üzerinde olacağını belirtir. Bu nitelik varsayılan olarak 10 değerindedir. Yani en faz 10 isteğe karşı izleme yapılabilir. Uygulama içierisinde sunucudan yapılan istek sayısı 10'u geçtiğinde artık izleme işlemi yapılmaz. İzleme işleminin tekrar başlaması için eski izleme bilgilerinin birazdan göreceğimiz yöntemle silinmesi gerekir. Bu yüzden bu niteliğin değerini ihtiyacımız ölüçüsünde ayarlamlıyız.

  • traceMode niteliği : Sunucudan yapılan isteklerin görüntüleneceği zaman ekranda sıralama şeklini belirtir. Bu nitelik iki değer alabilir. Birincisi SortByTime değeridir. Bu değer ile izleme bilgileri izlenme işleminin yapıldığı zamana göre sıralanır. Diğer bir değer olan SortByCategory ise izleme bilgilerini kategoriye göre alfabetik olarak sıralar.

Bu bilgilerden sonra uygulama bazında izleme çıktılarının nasıl görüntüleyebileceğimize bakalım. Bunun için uygulama altında özel bir URL çağırmamız gerekir. Bu URL'nin yolu aşağıdaki gibidir.

http://localhost/UygulamaAdı/trace.axd

trace.axd uygulama altında bulunan fiziksel bir dosya değildir. Web sunucudan böyle bir istek yapıldığında uygulama ile ilgili izleme çıktılarının web.config dosyasındaki ayarlara göre görüntüleneceği anlamına gelir.

Aşağıda trace.axd takma URL si çalıştırılarak elde edilmiş bir görüntü mevcuttur.



Yukarıdaki ekranda uygulamaya ait sayfalara yapılan isteklerin tarihleri, istekte bulunulan dosya ismi ve istek metodu görülmektedir. Yapılan isteklerle ilgili detaylı bilgiyi elde etmek için "View Details" bağlantısına tıklayın. Bu bağlantıya tıkladıktan sonra yukarıda anlatmış olduğum sayfa düzeyinde izleme bilgilerini görürsünüz.

İzleme kapasitesi dolduysa yukarıdaki ekran görüntüsünde kırmızı çerçeve içine alınan "clear current trace" bağlantısına tıklayın. Bu bağlantıya tıkladığınızda o ana kadar izlenmiş bütün bilgiler silinecektir. Ekran görüntüsü ile ilgili diğer önemli nokta ise izleme sınırına ne kadar yakınlaştığınızı gösteren "Remaining : 14" yazısıdır.

İzleme Çıktılarına Müdahele Etmek

İzleme işlemini en etkin kılan ve esnek olmasını sağlayan en önemli özellik izleme çıktısına programlama yolu ile müdahale edebilmemizdir. İzleme çıktısına yeni mesajlar eklemek için TraceContext sınıfının Write() yada Warn() metodu kullanılır. Bu iki metod arasındaki tek fark Warn() ile yazılan izleme çıktılarının kırmızı renkle yazılmasıdır. Dolayısıyla Warn() metodu ile yazılan mesajlar uyarı niteliği taşımaktadır. Write() metodunu aşağıdaki 3 biçimde çağırabiliriz.

1- void TraceContext.Write(mesaj)

    İzleme çıktısına bir mesaj ekler.

2
- void TraceContext.Write(kategori, mesaj)
   
    İzleme çıktısına bizim belirleyeceğimiz bir kategoride yeni bir mesaj ekler.

3
- void TraceContext.Write(kategori, mesaj, HataBilgisi)

    İzleme çıktısına bizim belirleyeceğimiz bir kategoride yeni bir mesajı bir hata bilgisi ile ekler. HataBilgisi, System.Exception türündendir.

Not: Warn() metodunun da Write() gibi 3 değişik kullanım biçimi vardır.

TraceContext sınıfının iki önemli elemanı daha vardır. Bu elemanlar IsEnabled ve TraceMode özellikleridir. IsEnabled özelliği bir sayfaya ilişkin izleme işleminin aktif olup olmadığını veren bool türünden bir elemandır. TraceMode özelliği ise TraceMode türünden bir numaralandırma(enum) olup izlenme çıktılarının ne şekilde görüntüleneceğini belirtir. TraceMode numaralandırması 3 sembol içerir. Bu semboller Default, SortByCategory ve SortByTime şeklindedir. Bu özelliğin hem get hemde set bloğu bildirilmiş olduğu için bu özellik hem yazılabilir hem de okunabilirdir.

Bir ASP.NET sayfasını temsil eden Page sınıfının üye elemanı olan Trace özelliği de TraceContext türündendir. Dolayısıyla Trace özelliğinin Write() yada Warn() metodunu kullanarak ilgili ASP.NET sayfasının izleme çıktısına yeni mesajlar ekleyebiliriz.

Kaynak kodda sayfanın Page_Load() metoduna aşağıdaki deyimi ekleyip izleme çıktısının ne şekilde değiştiğine bakalım.

private void Page_Load(object sender, System.EventArgs e)
{
    Trace.Warn("YeniKategori","Hata mesaji");
}


Sayfayı çağırdığımızda izleme çıktısının aşağıdaki gibi değiştiğini göreceksiniz.


Trace Information
Category Message From First(s) From Last(s)
aspx.page Begin Init  
aspx.page End Init 0.000235 0.000235
YeniKategori Hata mesajı 0,000361 0.000126
aspx.page Begin PreRender 0.000609 0.000248

Bu yazının sonuna geldik. ASP.NET ile ilgili bir sonraki yazımda hata ayıklama(Debugging) işlemine değineceğim.

Kaynaklar

Professioanl ASP.NET (WROX)
Step by Step ASP.NET(Microsoft Press)
Makale:
ASP.NET Sayfalarını İzleme(Trace) ASP.NET Sefer Algan
  • Yazılan Yorumlar
  • Yorum Yaz
EKİ
11
2011
Merhaba Sefer Abi.. Benim Makalenın ortasına gelıp anlayamadgım sey su ki web.config ayarlarını yazdgınız yeri web.configde hangi düğüm icerisine yazacagınız.?
HAZ
2
2003
Sefer Bey,çalışmalarınızı yakından takip eden herkes gibi ben de makalelerinizden çok yararlanıyorum.Tebrikler.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor