Programiranje

Kako implementirati preprost zapisovalnik v jeziku C #

Pogosto boste želeli beležiti dogodke ali napake, kot se pojavijo v vaši aplikaciji .Net. Če želite to narediti, lahko izkoristite enega od številnih priljubljenih okvirov beleženja, ki so na voljo, ali pa oblikujete in razvijete lasten okvir beleženja. V tem članku bomo videli, kako lahko z lahkoto oblikujemo in razvijemo lastno ogrodje beleženja, in se sprehodili po korakih za izdelavo preprostega dnevnika v C #.

Najprej boste morali razumeti cilje dnevnika - različna mesta, kamor bi lahko podatke beležili. Predpostavimo, da bomo podatke beležili v ploščate datoteke, zbirko podatkov in dnevnik dogodkov. Naslednje naštevanje opredeljuje cilje dnevnika, ki bi jih uporabili v tem preprostem okviru.

javno naštevanje LogTarget

    {

Datoteka, baza podatkov, EventLog

    }

Razredi dnevnikov C #

Naslednji korak je oblikovanje in izvajanje razredov. Uporabili bomo tri različne razrede - in sicer FileLogger, DBLogger, in EventLogger—Za beleženje podatkov v datoteko, bazo podatkov in dnevnik dogodkov. Vsi ti razredi bi morali podedovati abstraktni osnovni razred z imenom LogBase. Evo, kako so organizirani ti razredi.

  javni abstraktni razred LogBase

    {

javni povzetek void Log (niz sporočila);

    }

javni razred FileLogger: LogBase

     {

javni niz datotekPath = @ ”D: \ Log.txt”;

javni preglasiti void Log (niz sporočilo)

        {

z uporabo (StreamWriter streamWriter = nov StreamWriter (filePath))

            {

streamWriter.WriteLine (sporočilo);

streamWriter.Close ();

            }           

        }

    }

javni razred DBLogger: LogBase

    {

string connectionString = string.Empty;

javni preglasiti void Log (niz sporočilo)

        {

// Koda za beleženje podatkov v bazo podatkov

        }

    }

javni razred EventLogger: LogBase

    {

javni preglasiti void Log (niz sporočilo)

        {

EventLog eventLog = nov EventLog (“”);

eventLog.Source;

eventLog.WriteEntry (sporočilo);

        }

    }                                

Zapustil sem DBLogger razred nepopoln. Prepustil vam bom, da izpolnite ustrezno kodo za prijavo sporočil v bazo podatkov.

Kot lahko vidite, so vsi trije razredi - FileLogger, EventLogger, in DBLogger - razširiti abstraktni osnovni razred LogBase. Povzetek osnovnega razreda LogBase razglasi abstraktno metodo imenovano Dnevnik (). The Dnevnik () metoda kot parameter sprejme niz; ta niz je tisto, kar bo zapisano v datoteko ali bazo podatkov ali dnevnik dogodkov.

Razred C # LogHelper

Zdaj pa ustvarimo pomožni razred, s katerim lahko na podlagi posredovanega parametra prikličemo ustrezni dnevnik. Ta pomožni razred bo uporabljen za poenostavitev klicev na Dnevnik () v vsakem razredu zapisovalnika. Naslednji delček kode ponazarja ta razred pomočnikov.

javni statični razred LogHelper

    {

zasebni statični logBase logger = null;

javni statični void Log (LogTarget target, string message)

        {

stikalo (tarča)

            {

case LogTarget.File:

logger = new FileLogger ();

logger.Log (sporočilo);

odmor;

primer LogTarget.Database:

logger = nov DBLogger ();

logger.Log (sporočilo);

odmor;

case LogTarget.EventLog:

logger = nov EventLogger ();

logger.Log (sporočilo);

odmor;

privzeto:

vrnitev;

            }

        }

    }

The Dnevnik () metoda LogHelper razred sprejme niz in primerek datoteke LogTarget štetje kot parametri. Nato uporabi a stikalo: ohišje konstrukt za določitev cilja, kamor bo zabeleženo besedilno sporočilo.

Sinhronizacija klicev z metodo dnevnika C #

Ups! Pozabili smo sinhronizirati klice z ustreznimi Dnevnik () metode. Če želite to narediti, moramo uporabiti ključno besedo lock v Dnevnik () metode vsakega razreda zapisovalnika in vključiti ustrezno kodo za njihovo sinhronizacijoDnevnik () metode. Glejte LogBase razred spodaj. Vključili smo zaščiten člen, ki bo uporabljen za namestitev ključavnice v Dnevnik () metode vsakega izpeljanega razreda. Tu so spremenjene različice teh razredov.

javni abstraktni razred LogBase

    {

zaščiten objekt samo za branje lockObj = nov objekt ();

javni povzetek void Log (niz sporočila);

    }

javni razred FileLogger: LogBase

    {

javni niz datotekePath = @ ”D: \ Log.txt”;

javni preglasiti void Log (niz sporočilo)

        {

zaklepanje (lockObj)

            {

z uporabo (StreamWriter streamWriter = nov StreamWriter (filePath))

                {

streamWriter.WriteLine (sporočilo);

streamWriter.Close ();

                }

            }

        }

    }

javni razred EventLogger: LogBase

    {

javni preglasiti void Log (niz sporočilo)

        {

zaklepanje (lockObj)

            {

EventLog m_EventLog = nov EventLog (“”);

m_EventLog.Source;

m_EventLog.WriteEntry (sporočilo);

            }

        }

    }

javni razred DBLogger: LogBase

    {

string connectionString = string.Empty;

javni preglasiti void Log (niz sporočilo)

        {

zaklepanje (lockObj)

            {

// Koda za beleženje podatkov v bazo podatkov

            }

        }

    }

Zdaj lahko pokličete na Dnevnik () metoda LogHelper razred in cilj dnevnika in besedilno sporočilo posredujte kot parametre.

razredni program

    {

statična praznina Main (string [] args)

        {

LogHelper.Log (LogTarget.File, “Hello”);

        }

    }

Če želite kdaj prijaviti besedilno sporočilo na drug cilj dnevnika, preprosto posredujte ustrezen cilj dnevnika kot parameter v datoteko Dnevnik () metoda LogHelper razred.

Obstaja veliko načinov, kako lahko izboljšate ta dnevniški okvir. Lahko uporabite asinhronost in čakalno vrsto, tako da lahko dnevnik, ko prispe veliko število sporočil, ta sporočila asinhrono obdela, ne da bi moral blokirati trenutno nit. Morda boste želeli uporabiti tudi stopnje kritičnosti sporočil, kot so informativna sporočila, opozorilna sporočila, sporočila o napakah itd.

$config[zx-auto] not found$config[zx-overlay] not found