Makale Özeti

Debug ve Trace Sınıflarının Kullanılması

Makale


Debug ve Trace Sınıflarının Kullanılması - 2

Trace Anahtarları

Debug modda çalışırken Trace ve Debug sınıflarının çıktıları her zaman alınmak istenir. Fakat uygulama son halini alıp kullanıma sunulduktan sonra bu sınıflarının çıktıları sadece bazı durumlarda ve daha ayrıntısız alınmak istenebilir.

Trace anahtarları Trace çıktısının kontrol etmek için ayarlanan anahtarlardır. Trace anahtarları uygulama derlendikten sonra uygulamanın ayar dosyasında (uygulama.exe.config) ayarlanabilir.

.NET Framework sınıf kütüphanesinde iki çeşit Trace anahtarı bulunur. BooleanSwitch ve TraceSwitch sınıfları.

BooleanSwitch sınıfı boolean (true veya false) türünde değer döner, bu değer ile Trace açılıp kapanır.
TraceSwitch sınıfı ile trace çıktısının türüne göre beş değer alabilir.

BooleanSwitch ve TraceSwitch sınıflarının birer örneğini diğer herhangi bir sınıfın örneğini oluşturur gibi oluştururuz. İki sınıfta yapılandırıcılarında DisplayName (görünen isim) ve Description (açıklama) adında iki parametre alır.



Dim ts As New TraceSwitch("tanahtar", "aciklama")
Dim bs As New BooleanSwitch("banahtar", "aciklama")

 

TraceSwitch sınıfı beş tane farklı hata seviyesini için seçeneğe sahiptir. Bu seçenekler TraceSwitch.Level özelliği ile ayarlanır.

Bu beş değer şunlardır :

TraceLevel.Off: TraceSwitch durumu kapalıdır. Tam sayı karşılığı 0’ dır.

TraceLevel.Error: Kısa bir hata mesajını temsil eder. Tam sayı karşılığı 1’ dir.

TraceLevel.Warning: Hata mesajlarını ve uyarıları temsil eder. Tam sayı karşılığı 2’ dir.

TraceLevel.Info: Hata mesajlarını ve uyarıları ve kısa açıklayıcı bilgileri temsil eder. Tam sayı karşılığı 3’ dür.

TraceLevel.Verbose: Hata mesajlarını ve uyarıları ve uygulamanın ayrıntılı çalışma bilgisini temsil eder. Tam sayı karşılığı 4 dür.

Trace ifadesi çıktı oluşturmak için Trace anahtarlarını kontrol edip ona göre çıktı oluşturabilir. Aşağıdaki örnekte Trace.WriteIf ve Trace.WriteLineIf metodları bir Trace anahtarını kontrol ediyorlar.


Dim ts As New TraceSwitch("tanahtar", "aciklama")
Dim bs As New BooleanSwitch("banahtar", "aciklama")
bs.Enabled = True
ts.Level = TraceLevel.Error
Trace.WriteIf(bs.Enabled = True, "Hata!")
Trace.WriteLineIf(ts.TraceInfo = True, "Tür Hatası!")

Yukarıdaki kod bloğunun sonucunda sadece Hata! metni Trace çıktısı olacaktır. Tür Hatası! yazan Trace.WriteLineIf metodu çalışmayacaktır. Çünkü koşul sağlanmamaktadır.

Bu aşamaya kadar uygulamada herhangi bir otomatiklik söz konusu değil. Çünkü TraceSwitch ve BooleanSwitch nesnelerinin değerleri program içerisinde kod yazarak değiştirildi. Bu anahtarların değerlerini uygulamanın .config dosyası ile değiştirebiliriz.

.config dosyası uygulamanın ismi ile aynı olmalı ve sonunda .config bulundurmalıdır. Örneğin uygulama.exe isimli programın ayar (.config) dosyası .exe dosyası ile aynı klasörde uygulama.exe.config olmalıdır.
 

Uygulamaya bir .config dosyası eklemek için projenin üzerinde sağ tıklayıp gelen menüden Add>Add New Item menü seçeneği seçilir, açılan diyalog kutusundan Application Configuration File seçilir. Proje içerisinde app.config ismi ile bir dosya oluştu. Uygulama derlendiği sırada app.config dosyasının bir kopyası .exe dosyasının bulunduğu bin klasörüne uygulama.exe.config şeklinde kopyalanır.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
</configuration>

Yeni eklenen App.Config dosyası yukarıdaki şekilde olacaktır.

Uygulama ayar dosyasında (app.config) anahtarların ayarlarını yapmak için <configuration> düğümü içerisine aşağıdaki gibi bir tanımlama eklenmelidir.

<system.diagnostics>
    <switches>
        <add name="tanahtar" value="1" />
        <add name="banahtar" value="0" />
    </switches>
</system.diagnostics>


<add> düğümünün name özelliği ile verilen değer anahtarlar oluşturulurken verilen DisplayName parametresi ile örtüşmek zorundadır.
Yukarıdaki .config dosyası tanımlaması için oluşturulacak olan nesneler aşağıdaki gibi olmalıdır.

Dim ts As New TraceSwitch("tanahtar", "aciklama")
Dim bs As New BooleanSwitch("banahtar", "aciklama")


Yukarıdaki .config dosyasında ts TraceSwitch nesnesinin seviyesi TraceLevel.Error olarak ayarlanmıştır.
banahtar değeri ile verilen 0 değeri ise bs ismindeki BooleanSwitch nesnesinin kapalı duruma getiriyor. (bs.Enabled=False)
 

Uygulamanın ayarlarını .config dosyasından değiştirirken hata yapılmamasını sağlamak için .config dosyasının içerisine yorum satırları ile açıklama ekleyebilirsiniz.

<system.diagnostics>
    <switches>

        <!-- bu anahtar değerini 0,1,2,3 veya 4
        (off, error, warning, info, verbose) yapabilirsiniz.-->
   
       
<add name="tanahtar" value="0" />

        <!-- bu anahtar değerini 0 dışında bir değer yaptığınızda
        Trace mesajları görüntülenir. 0 dışında bir değer
        verildiği zaman trace çıktısı alınmaz. -->


       
<add name="banahtar" value="1" />

    </switches>
</system.diagnostics>


.config dosyası yukarıdaki şekilde ayarlandığında aşağıdaki kod bloğunun çıktısı ne olur?

Dim ts As New TraceSwitch("tanahtar", "aciklama")
Dim bs As New BooleanSwitch("banahtar", "aciklama")
Trace.WriteIf(bs.Enabled = True, "Hata!")
Trace.WriteLineIf(ts.TraceError = True, "Tür Hatası!")

Kod bloğunun çıktısı Hata! olur. Birinci satır çalışır çünkü .config dosyasında banahtara 1 verilerek bs.Enabled=True yapılmış oldu. İkinci satırda ise koşul olarak TraceError değerinin True olması isteniyor. Bu durumda .config dosyasında tanahtar değeri 0 verilerek ts.Level=TraceLevel.Off yapılmış olduğundan bu satır Trace çıktısı üretmez.
 

Cengiz HAN
Microsoft ASP.NET MVP
msn (ve email) : cengiz@cengizhan.com
(eğer online isem çekinmeden mesaj atabilirsiniz.)
e-mail : cengizh@yazgelistir.com