İzleme

 

Rob Howard
Microsoft Corporation

25 Ocak 2001, Şubat

ASP.NET hakkında her sunu yaptığımda, yeni izleme işlevi gösterildiğinde izleyicileri watch her zaman eğlenceli oluyor. ASP ile çözüm oluşturanlar için izleme bir lütfudur!

Bu ayın sütununda, ASP.NET'daki izleme özelliğine göz atacağız. Asp, Response.Write() için yaygın izleme tekniğini tartışarak başlayalım.

ASP ile izleme

Benim gibiyseniz, bir ASP uygulaması kodlarken, kodun sorunlu bir bölümünü parçalara ayırırken Response.Write() deyimlerini kullanırsınız.

Bu noktayı göstermek için bazı sahte kodlar aşağıdadır:

<%
On Error Resume Next 
Response.Write("About to do data access...")
Set objDB = Server.CreateObject("Custom.DataAccess")
objDB.Open("PersonalizationData")
user = objDB.Get("username")
Response.Write("Done calling data access. Value of username is:" + user)
%>

Yukarıdaki koddaki Response.Write() çağrıları oldukça tanıdık görünmelidir; örneğin, kodumuzun davranışıyla ilgili bir hata aldık. Hatanın, nesnenin yüklenememesi gibi bir uygulama veya sistem hatası olması gerekmez, bunun yerine kodun beklendiği gibi yürütüleceği ancak beklenen değeri döndürmediği bir kodlama hatasıdır.

Elbette bir hata ayıklayıcı da kullanabiliriz, ancak bazen kodun ne yaptığını bulmak veya kodun belirli bir bölümünün nasıl yürütülmekte olduğunu bize bildirmek için izleme çıkışı almak daha hızlı olabilir.

Repsonse.Write() deyimleri uygulamanın hatalarını oldukça hızlı bir şekilde ayıklamayı kolaylaştırsa da, dağıtılan uygulamaları bozan gerçek hatalarla sonuçlanan bir uygulamaya gereksiz kodlar ekler. Örneğin, üzerinde çalıştığımız kodla ilgili gerçek duygularımızı ifade eden daha renkli bir Response.Write() deyimini kaldırmayı unutmamız genellikle iyi bir şey olarak kabul edilmez.

Tabii ki, ASP.NET içinde Response.Write() deyimlerinin aynı işlevselliği desteklenir. Aslında artık bir izleme özelliğimiz olmasına rağmen kendimi Response.Write() kullanarak buluyorum. Eski alışkanlıkları bozmak zordur.

Ancak, yeni izleme işlevi bize ASP: hata ayıklama modunda olmayan bir şey sağladığından hepimiz bu eski alışkanlıkları bozmaya çalışmamız gerekir.

ASP.NET ile izleme

ASP.NET'in yeni izleme özellikleri , Response.Write() deyimlerinin benzetimini yapmamıza olanak tanır, ancak uygulamalarımızı dağıtmadan önce deyimleri kaldırma konusunda endişelenmemize olanak tanır. Bunun yerine, yukarıdakiyle aynı kodu yazdığınızı düşünün, ancak Response.Write() yerine Trace.Write() kullanıyoruz.

trace nesnesi artık İstek, Yanıt, Sunucu vb. gibi bir iç sayfa nesnesidir. Sayfa kodumuzla doğrudan erişilebilir.

Trace sınıfına kısaca göz atalım.

İzleme sınıfı

İzleme , ASP.NET sayfalarda genel bir özellik olarak kullanıma sunulur. Trace özelliğini kullandığımızda, System.Web ad alanında tanımlanan TraceContext sınıfının bir örneğiyle çalışıyoruz.

trace sınıfı iki aşırı yüklenmiş yöntemi ve iki özelliği kullanıma sunar. İki yöntem Warn() ve Write(), ikisi de birbirinin aynı iki prototipi destekler:

VB.NET

Public Sub [Warn | Write](category As String, 
                          message As String, 
                          errorInfo As Exception)
End Sub
Public Sub [Warn | Write](category As String, 
                          message As String)
End Sub

C#

public void [Warn | Write](String category, 
                           String message, 
                           Exception errorInfo)
public void [Warn | Write](String category, 
                           String message)

kategori parametresi, ileti değerinin yazacak kategori adını tanımlamak için kullanılır. Aşağıdaki örnekte Write() yöntemini kullandığımızda bu durum daha belirgin hale gelecektir. Hem Warn() hem de Write() tarafından aşırı yüklenmiş yöntemlerinde desteklenen üçüncü parametre errorInfo'dur. Bu, izleme sistemine özel durum ayrıntılarını geçirmemizi sağlar.

Özellikler

TraceContext sınıfı iki ortak özelliği destekler: IsEnabled ve TraceMode.

  • IsEnabled , sayfada veya uygulama için izlemenin etkinleştirilip etkinleştirilmediğini gösterir.
  • TraceMode, izlemenin kullandığı sıralama modunu ayarlar veya döndürür. Aşağıda uygulama düzeyinde izlemeyi incelediğimizde izleme modunu yapılandırma konusunu inceleyeceğiz.

Sınıfının ve TraceContext sınıfı tarafından desteklenen yöntemlerin ve özelliklerin nasıl göründüğünü gördüğümüze göre, şimdi bir Trace.Write() örneğine göz atalım.

<Script runat=server>
Public Function Add(a As Integer, b As Integer) As Integer
  Trace.Write("Inside Add() a: ", a.ToString())
  Trace.Write("Inside Add() b: ", b.ToString())
  return a + b
End Function
</Script>
Call the Add routine: 4 + 5 = <%=Add(4,5)%>

Bu kod çalıştırıldığında çıkış şöyledir:

Şekil 1. Trace.Write() yöntemi örneği

Açıkça add () yöntemi çağrılır. Ancak , Repsonse.Write() deyimlerinden farklı olarak Trace.Write() deyimleri sonuçta elde edilen çıktıda görünmez. Trace.Write() deyimlerinin sonuçlarını görüntülemek için bu sayfa veya uygulama için izlemeyi etkinleştirmemiz gerekir.

İzlemeyi etkinleştirmek için bir sayfa yönergesi veya yapılandırma seçeneği kullanabiliriz. Şimdi her ikisine de bakalım.

Sayfa İzleme Yönergesi

Sayfa yönergeleri, ASP.NET bir ASP.NET kaynağı için isteği işlerken kullandığı özel yönergelerdir. Sayfa yönergeleri, bir ASP.NET sayfasının yapılandırma ayarlarını geçersiz kılmak veya uygulamak için kullanılabilir.

Yönerge, sayfadaki ilk öğe olmalıdır. Aşağıdaki söz dizimi kullanılarak bildirilir:

<%@ Directive Attribute="[Value]" %>

Yukarıdaki söz dizimini kullanarak, ASP.NET sayfada izlemenin etkinleştirilmesini istediğimizi şu şekilde anlarız:

<%@ Page Trace="true" %>

Yukarıdaki yönergeyi örnek kodumuza eklersek sayfa çıkışımız biraz farklı görünür:

Şekil 2. İzleme etkin

Şimdi izleme çıkışını sayfanın en altına ekliyoruz. İzleme çıkışı her zaman sayfanın sonuna eklenir.

Şimdi uygulama düzeyinde izlemeyi nasıl etkinleştirdiğimize bakalım. Ardından izleme çıkışının ne içerdiğini ele alacağız.

Uygulama İzleme

ASP.NET, ASP.NET uygulamaların yapılandırma ayarlarını ayarlamak için XML yapılandırma dosyalarını kullanır. Her ASP.NET yüklemesi, config.web adlı [sistem sürücüsü]\WinNt\Microsoft.NET\Framework\[version]\ dizinine bir yapılandırma dosyası yükler.

Yapılandırma dosyası varsayılan ASP.NET yapılandırmasını ayarlar ve Beta 1'de kök yapılandırma dosyası olarak bilinir. Bu dosyada yapılan değişiklikler tüm ASP.NET Web uygulamamızı etkiler. Varsayılan config.web dosyasından alınan ayarları eklemek veya kaldırmak için Web uygulamalarımızda yapılandırma dosyalarını da kullanabiliriz.

Yapılandırmayı gelecek bir sütunda daha ayrıntılı olarak ele alacağız. Şimdilik kök yapılandırma dosyasını kullanarak tüm ASP.NET uygulamaları için izleme ayarlarını uygulayacağız.

İzleme bölümü

root config.web dosyasını açarsak bir izleme bölümü buluruz:

<configuration>
    <trace
        enabled="false"
        requestlimit="10"
        pageoutput="false"
        tracemode="SortByTime"
    />
</configuration>

İzleme öğesi için dört öznitelik vardır:

  • enabled = "[true/false]"—Etkin seçeneği true veya false olarak ayarlayabiliriz. İzleme bir uygulama düzeyinde etkinleştirilir veya uygulama düzeyinde devre dışı bırakılır. enabled=false değerini ayarlarsak, sayfa izleme daha önce açıklanan İzleme yönergesi kullanılarak desteklenmeye devam edilir.
  • requestlimit = " [int]"—Bellekte uygulama bazında önbelleğe alınmaya devam etmek için izleme isteklerinin toplam sayısı. İzleme, pageoutputfalse olarak ayarlandığında izleme çıkışını görüntülemek için kullanılan trace.axd adlı özel bir kaynağı kullanıma sunar.
  • pageoutput = " [true/false]"—İzleme yapılandırma dosyası aracılığıyla etkinleştirildiğinde, yönetici her sayfada izlemeyi etkinleştirebilir veya devre dışı bırakabilir. pageoutput izlemesi, uygulama içindeki her sayfa için izleme ayrıntılarını etkinleştirir. Ancak uygulama düzeyinde izleme hala etkinken (true" etkin = ") pageoutput izleme kapatılabilir. Bu, izleme isteklerini bellekte tutar; böylece trace.axd aracılığıyla kullanılabilirler. Bu isteklere kısa bir süre içinde bakacağız ancak bir sayfanın çıkışında görüntülenmeyeceğiz.
  • tracemode = "[SortByTime | SortByCategory]"tracemode ayarı, izleme ayrıntısı bilgilerinin çıkışını denetlememizi sağlar. Veriler zamana veya kategoriye göre sıralanabilir; burada kategori sistem tarafından yapılan ayarlarla geliştirici tarafından etkinleştirilen Trace.Write() ayarları arasında ayrım yapılır. Örneğin örneğimizde şunları kullandık: Trace.Write("Inside Add() a:", a.ToString()).Trace.Write() deyiminin ilk parametresi kategoridir. Bu örnekte kategoriyi Inside Add() a:" olarak" tanımladık. Kategoriye göre sıralarsak (tracemode = "SortByCategory"), bu öğe normal sayfa işlevi izleme çıkışında çağrılmadan önce sıralanır. Zamana göre sıralama ise çağrıda harcanan süreye göre sıralanır.

Uygulama izlemeyi kullanma

Yukarıdaki örnek kodu kullanarak page yönergesini kaldırabilir ve config.web izleme ayarlarını değiştirerek aynı işlevselliği etkinleştirebiliriz.

<configuration>
    <trace
        enabled="true"
        requestlimit="10"
        pageoutput="true"
        tracemode="SortByTime"
    />
</configuration>

Artık page yönergesini kaldırarak örnek uygulamamızı çağırabilir ve aynı çıkışı elde edebiliriz:

Şekil 3. İzleme etkin, Page yönergesi yok

Peki daha önce bahsedilen, izlemeyi etkinleştirdiğimiz ancak sayfadaki çıkışı devre dışı bırakacağımız özelliği kullanmak istersek ne olur?

<configuration>
    <trace
        enabled="true"
        requestlimit="10"
        pageoutput="false"
        tracemode="SortByTime"
    />
</configuration>

Yukarıdaki yapılandırma ayarlarıyla örnek uygulamayı talep ettiysek, izleme hala etkin olsa da izleme çıktısı almayacağız. İzleme çıkışını görüntülemek için trace.axd adlı özel bir uygulama kullanırız.

Trace.axd

Trace.axd bir Http İşleyicisi'dir. Http İşleyicisi, istek/yanıtları en temel düzeyde işlememizi sağlayan bir kodlama seçeneğidir. Http İşleyicileri ISAPI uzantılarının eşdeğeridir. Ancak ISAPI'nin aksine, herhangi bir .NET dili kullanılarak yazılabilir. Sonraki bir sütunda Http İşleyicileri'ni daha ayrıntılı olarak ele alacağım.

Trace.axd, uygulama izleme ayrıntılarını istemek için kullanabileceğimiz bir Http İşleyicisi'dir. İstendiğinde, son n isteğin izleme günlüğü verilir; n, yapılandırma dosyamızda requestlimit="[int]" tarafından ayarlanan değer tarafından belirlenir.

trace.axd'yi kullanmak için örnek uygulama için isteğin yapıldığı uygulama dizininde trace.axd dosyasını istemeniz yeterlidir:

Şekil 4. Uygulama izleme istekleri

Ekran görüntüsünden görebileceğiniz gibi, görüntüleyebileceğimiz izlemelerin bir listesi sunulur. Bu izleme görünümleri, sayfanın çıkışı dahil edilmeden izlemenin sayfaya ekleyecekleri ayrıntılarla aynıdır:

Şekil 5. İstek ayrıntıları

İzlemeyi yapılandırma ve kullanma adımlarını incelediğimize göre şimdi izleme çıktısını ele alalım.

İzleme Çıkışını Yorumlama

İzleme görünümü tarafından Trace.axd aracılığıyla veya bir sayfada sağlanan çıkış, altı ayrıntı bölümü sağlar:

  • İstek ayrıntıları—Bu, oturum kimliği, isteğin saati, Http istek türü ve Http yanıt durum kodu gibi temel bilgilerdir.
  • İzleme bilgileri— Bu bölüm, kategorilerin ve iletilerin tablo görünümünü sağlar. Kodumuzda Trace.Write() deyimlerini kullanırsak, Trace.Write() tarafından kabul edilen iki parametre sırasıyla Kategori ve İleti değerleri olarak kullanılır. Ayrıca ilk bayttan son bayta kadar olan süre de sağlanır.
  • Denetim ağacı—Bu sütunda henüz açıklanmasa da, ASP.NET bildirim temelli olarak uygulama oluşturmamıza olanak sağlamak için sunucu denetimlerini kullanır. Denetim Ağacı bölümü, sayfamızdaki denetimler hakkında bilgi sağlar. Bize denetimin kimliği, türü, işleme boyutu ve görünüm durumu boyutu sağlanır. Bu bilgiler, hangi denetimleri kullandığımıza ve ilişkili maliyete (işleme boyutu ve görünüm durumu) ilişkin bir fikir verir.
  • Tanımlama bilgileri koleksiyonu— İstemcinin istek üst bilgilerinde gönderdiği tüm tanımlama bilgileri ayrıştırılır ve adları, değerleri ve boyutları görüntülenir.
  • Üst bilgi koleksiyonu—İstemci tarafından sunucuya sunulan Http üst bilgileri bu bölümde verilmiştir. Ad/Değer listeleyen basit bir tablodur.
  • Sunucu değişkenleri—Sunucu değişkenleri bölümü, sunucu değişkenlerinin Ad/Değer çifti tablosunu sunar.

İzlemeyi Kullanma

Açıkça görebileceğiniz gibi izleme, Web uygulamaları geliştirmeyi kolaylaştırmak için tasarlanmış yeni ve güçlü bir ASP.NET özelliğidir. Bununla birlikte, izlemeyi ne zaman kullanmanız ve kullanmamanız gerektiğini de belirtmenin faydalı olacağını düşündüm.

Dağıtılan Uygulamalar

İzleme, isteklere ek yük ekler ve dağıtılan uygulamalar için etkinleştirilmemelidir. Ancak trace.Write() deyimleri, izleme etkinleştirilmediğinde yoksayıldığından içinde bırakılabilir.

Verileri yakalamak istediğimiz dağıtılan uygulamalar için System.Diagnostics ad alanında bulunan sınıfları kullanmanızı öneririm. Gelecek bir sütunda ele almaya çalışacağım bu sınıflar doğrudan Windows olay günlüğüne yazmamıza olanak sağlıyor.

Uygulama oluştururken izlemeyi kesinlikle kullanmalıyız, ancak uygulamayı dağıtmaya hazır olduğumuzda bu Response.Write() deyimlerini kaldırdığımız gibi devre dışı bırakmalıyız.

Trace.axd'yi devre dışı bırakma

Üretim Web sunucusuna ASP.NET yüklediyseniz Trace.axd dosyasını açıkça devre dışı bırakmanızı öneririm. root config.web dosyasını açın, bölümünü bulun <httphandlers> ve aşağıdaki girdiyi ekleyin:

<configuration>
        <add verb="*" 
             path="trace.axd"
             type="System.Web.Handlers.TraceHandler" />
        <remove verb="*" path="trace.axd"/>
</configuration>

Not: Girdinin tamamını <add/> da kesebiliriz, ancak <remove> seçenek daha iyidir çünkü kodu yapılandırma dosyamızda bırakır ve aynı hedefi gerçekleştirir ve trace.axd öğesini devre dışı bırakır. Bu, ASP.NET Beta 2'de çözülecektir.

Özet

ASP.NET'daki izleme özelliği, uygulamamızın ne yaptığını izlemenin yeni ve güçlü bir yoludur. Geçmişte, yürütülürken uygulamamızı izlemek için Response.Write() deyimlerini kullandık, ancak artık Trace.Write() deyimlerini kullanabilir ve bu deyimleri dağıtılan kodumuzda bırakabiliriz. Uygulamayı dağıtmaya hazır olduğumuzda kodu kaldırmadığımız için bu daha az hataya yol açar.

ASP.NET Kaynakları

Son olarak, kullanılabilir yeni ASP.NET kaynaklarından bazılarını çağırmak istedim. Daha fazla ASP.NET kaynağı hakkında bilgi edinmek için lütfen ziyaret edin https://www.asp.net .

Rob Howard, .NET Framework ekibinde ASP.NET program yöneticisidir. Ne kadar boş vakti varsa ailesiyle ya da Doğu Washington'da balık tutarak geçiriyor.