reklama

Poznáváme C# a Microsoft .NET - 73. díl – Pokročilé použití trasování

Dnešní díl naváže na díl minulý a to podrobnějším pojednáním o podávání trasovacích informací pomocí typů ve jmenném prostoru System.Diagnostics.

Přidané informace k trasování

V novém .NET frameworku verze 2.0 přibyla na typu TraceListener užitečná vlastnost s názvem TraceOutputOptions. Tato vlastnost je typu TraceOptions, což je výčet, který díky tomu, že je příznakový (je označen atributem Flags) může nabývat kombinací vyčíslených hodnot. Pomocí přiřazení hodnot této vlastnosti jsme schopni přidat k podávaných trasovacím informacím různé další informace. Těmito přidanými informacemi může například být zásobník volání, aktuální čas či identifikátor procesu nebo přímo vlákna. V následujícím ukázkovém zdrojovém kódu je pomocí vlastnosti TraceOutputOptions nastaveno, že spolu s výpisem trasovacích informací bude na konzoli vypsán i zásobník volání a aktuální čas.

TextWriterTraceListener consoleListener = new TextWriterTraceListener(Console.Out);
//na konzoli bude s informacemi vypsan cas a zasobnik volani
consoleListener.TraceOutputOptions = TraceOptions.Callstack | TraceOptions.DateTime;

Trace.Listeners.Add(consoleListener);
//vypis trasovacich hlasek
Trace.TraceInformation("Info");
Trace.TraceWarning("Warning");
Trace.TraceError("Error");

Samozřejmě lze hodnotu této vlastnosti nastavit i externě, tedy z konfiguračního souboru assembly a to pomocí atributu traceOutputOptions.

<configuration>
  <system.diagnostics>
    <trace autoflush="true">
      <listeners>
        <add name="ConsoleListener" type="System.Diagnostics.ConsoleTraceListener" traceOutputOptions="DateTime, Callstack" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

Výpis trasovacích informací do logu systému Windows

V určitých situacích můžeme potřebovat vypisovat trasovací informace do logu událostí systému windows a to na například z důvodu, aby tyto informace mohl sledovat administrátor systému na němž aplikace běží. K tomuto účelu využijeme specifický typ posluchače (TraceListener), který již byl zmíněn v minulém díle a tímto typem je EventLogTraceListener. Použití je velmi jednoduché, jak ukazuje následující příklad.

//zpravy budou trasovany se zdrojem PrikladyZive
EventLogTraceListener logListener = new EventLogTraceListener("PrikladyZive");
Trace.Listeners.Add(logListener);
Trace.WriteLine("Trasovaci zprava..");

Při vytváření instance tohoto typu posluchače je v příkladu pomoci parametru specifikován zdroj události. Takto specifikovaný zdroj je po té přiřazen každé zprávě, která je pomocí tohoto posluchače do logu zapsána. Pokud specifikujeme zdroj tímto způsobem budou zprávy zapisovány do logu událostí aplikace.

Klepněte pro větší obrázek

Naše trasovací zpráva v logu událostí systému Windows

Poznámka: Dobře si rozmyslete, než do seznamu vašich posluchačů trasování či ladění přidáte instanci typu EventLogTraceListener, protože log událostí systému Windows by hlavně z důvodu přehlednosti neměl být zahlcován nepřeberným množstvím zpráv, které při trasování/ladění můžou být podávány. Z tohoto důvodu jsou také posluchačem tohoto typu ignorovány hodnoty vlastnosti TraceOutputOptions

Přepínače trasování

Velmi užitečnou vlastností, kterou dostal diagnostický subsystém .NET frameworku do vínku jsou takzvané přepínače trasování (Trace switches). Pomocí těchto přepínačů je možné bez zásahu do aplikačního kódu konfigurovat, jaké informace budou trasovány. Přepínače trasování jsou konfigurovány v konfiguračním souboru assembly, kde jsou v elementu switches definovány a to vždy názvem a hodnotou.

<configuration>
  <system.diagnostics>
    <switches>
      <add name="first" value="1"/>
      <add name="second" value="4"/>
    </switches>
  </system.diagnostics>
</configuration>

Pomocí názvu přepínače se na něj budeme odkazovat ve zdrojovém kódu aplikace a jeho hodnota představuje úroveň detailnosti trasování. V aplikačním kódu se přepínač využije vytvořením instance třídy, která je odvozená od abstraktní třídy Switch, což jsou třídy BooleanSwitch a TraceSwitch. Instance přepínače typu BooleanSwitch mohou nabývat pouze dvou hodnot a to zapnutý či vypnutý. Naproti tomu instance typu TraceSwitch mohou nabývat hned pěti hodnot, kde každá z nich určuje jaké všechny typy trasovacích zpráv budou brány v potaz. Takže lze určit, že budou trasovány zprávy všech typů, nebo pouze zprávy o chybě nebo zprávy žádné. Tato hodnota je nastavena vlastností Level, která může nabývat hodnot výčtu TraceLevel, což jsou :  Off (Žádné trasovací zprávy), Error, Warning, Info a Verbose (Všechny trasovací zprávy). V případě externí konfigurace pomocí konfiguračního souboru assembly je hodnota Off představována číslem 0 a hodnota Verbose číslem 4. Hodnoty mezi těmito dvěma úrovněmi jsou logicky 1, 2 a 3. A jak se takto nakonfigurované přepínače v aplikaci použití již ukazuje následující příklad.

public class TraceSwitches
{
    private BooleanSwitch firstSwitch;
    private TraceSwitch secondSwitch;

    public TraceSwitches()
    {
        //vytvoreni instance, ktera je konfigurovana pod jmenem first
        firstSwitch = new BooleanSwitch("first", "Nejaky popis");
        //vytvoreni instance, ktera je konfigurovana pod jmenem second
        secondSwitch = new TraceSwitch("second", "Nejaky popis");
    }

    public void DoSomething()
    {
        TextWriterTraceListener consoleListener = new TextWriterTraceListener(Console.Out);
        Trace.Listeners.Add(consoleListener);
        //zprava bude zapsana pouze pokud je prvni prepinac aktivni
        Trace.WriteLineIf(firstSwitch.Enabled, "Prvni trasovaci zprava..");

        //zprava bude zapsana pouze pokud je prepinac aktivni na urovni Error nebo vyssi
        Trace.WriteLineIf(secondSwitch.TraceError, "Zprava o chybe..");
       //zprava bude zapsana pouze pokud je prepinac zapnuty na urovni Warning nebo vyssi
        Trace.WriteLineIf(secondSwitch.TraceWarning, "Varovani..");
        //zprava bude zapsana pouze pokud je prepinac zapnuty na urovni Info nebo vyssi
        Trace.WriteLineIf(secondSwitch.TraceInfo, "Nejaka informace..");
        //zprava bude zapsana pouze pokud je prepinac zapnuty na urovni Verbose
        Trace.WriteLineIf(secondSwitch.TraceVerbose, "Nejaka trasovaci zprava..");
    }
}

Při použití přepínače typu BooleanSwitch zjistíme, jestli je zapnutý přečtením vlastnosti Enabled. V případě použití přepínače typu TraceSwitch využijeme vlastností TraceError, TraceWarning, TraceInfo a TraceVerbose, abychom v kombinaci s použitím metody WriteLineIf typu Trace, zajistili zapsání zprávy v závislosti na konfiguraci přepínače. Takže například, pokud by naše instance přepínače TraceSwitch měla nastavenou úroveň na hodnotu Warning budou pomocí tohoto přístupu vypisovány pouze zprávy o chybách a varování.

Příklady ke článku můžete nalézt zde.

Témata článku: Software, Microsoft, Windows, Programování, Error, First, Second

2 komentáře

Nejnovější komentáře

  • gully, gully 29. 5. 2006 19:02:36
    Off-line verzi seriálu si můžete stáhnout z...
  • gully, gully 29. 5. 2006 18:15:45
    Off-line verzi seriálu si můžete stáhnout z adresy...
reklama
Určitě si přečtěte

UPC překopli páteřní kabel. V Brně i druhý den nejede internet ani kabelovka

UPC překopli páteřní kabel. V Brně i druhý den nejede internet ani kabelovka

** V Brně byl velký výpadek služeb UPC ** Důvodem je překopnutý páteřní kabel ** V některých lokalitách služby stále nefungují

5.  12.  2016 | Jakub Čížek | 103

17 expertek Microsoftu předpovědělo rok 2027. Splní se alespoň něco?

17 expertek Microsoftu předpovědělo rok 2027. Splní se alespoň něco?

** Zmizí klasické vyhledávače ** Budeme programovat buňky ** Kvantové počítače překonají šifry

6.  12.  2016 | Jakub Čížek | 36

11 tipů na dobrý stolní počítač: od základu po herní mašiny

11 tipů na dobrý stolní počítač: od základu po herní mašiny

** Postavte si stolní počítač! Máme pro vás 11 vzorových sestav s rozpisem komponent ** Většina tipů cílí na hráče, věnujeme se ale i základnímu PC a počítačům na střih videa ** Nadělte si nový počítač třeba pod stromeček

5.  12.  2016 | Adam Kahánek | 74

Nejlepší notebooky nad 20 tisíc: poradíme, které teď chcete

Nejlepší notebooky nad 20 tisíc: poradíme, které teď chcete

** V notebooku s cenou nad 20 tisíc nesmí chybět kvalitní displej a rychlé úložiště ** Za dalších deset tisíc můžete dostat navíc styl nebo výkonnější komponenty ** Vybírat můžete z různých velikostí i konstrukcí

8.  12.  2016 | Stanislav Janů | 85


reklama