Programavimas

Kaip įdiegti paprastą kaupiklį C #

Dažnai norėsite registruoti įvykius ar klaidas, kai jos įvyksta jūsų .Net programoje. Norėdami tai padaryti, galite pasinaudoti viena iš daugelio populiarių medienos ruošos sistemų galimybėmis, arba galite sukurti ir kurti savo medienos ruošos sistemą. Šiame straipsnyje mes pamatysime, kaip mes galime lengvai kurti ir plėtoti savo medienos ruošos sistemą, ir atliksime veiksmus, kaip sukurti paprastą kaupiklį C #.

Pirmiausia turėsite suprasti žurnalo taikinius - įvairias vietas, kuriose galima registruoti duomenis. Tarkime, kad duomenis užregistruosime į plokščius failus, duomenų bazę ir įvykių žurnalą. Šis sąrašas apibūdina žurnalo taikinius, kuriuos naudosime šioje paprastoje sistemoje.

public enum „LogTarget“

    {

Failas, duomenų bazė, „EventLog“

    }

C # logger klasės

Kitas žingsnis - suprojektuoti ir įgyvendinti klases. Mes naudosime tris skirtingas klases: „FileLogger“, „DBLogger“ir „EventLogger“—Įregistruoti duomenis atitinkamai į failą, duomenų bazę ir įvykių žurnalą. Visos šios klasės turėtų paveldėti abstrakčią pagrindinę klasę, pavadintą „LogBase“. Štai kaip organizuojami šie užsiėmimai.

  viešoji abstrakčioji klasė „LogBase“

    {

public abstract void Žurnalas (eilutės pranešimas);

    }

viešosios klasės „FileLogger“: „LogBase“

     {

viešosios eilutės failasPath = @ ”D: \ Log.txt”;

public override void Log (eilutės pranešimas)

        {

naudojant [StreamWriter streamWriter = new StreamWriter (filePath)]

            {

streamWriter.WriteLine (pranešimas);

streamWriter.Close ();

            }           

        }

    }

viešosios klasės „DBLogger“: „LogBase“

    {

string stringString = eilutė. Tuščias;

public override void Log (eilutės pranešimas)

        {

// Kodas registruoti duomenis į duomenų bazę

        }

    }

viešosios klasės „EventLogger“: „LogBase“

    {

public override void Log (eilutės pranešimas)

        {

EventLog eventLog = new EventLog („“);

eventLog.Source;

eventLog.WriteEntry (pranešimas);

        }

    }                                

Aš palikau „DBLogger“ klasė nebaigta. Aš paliksiu jums užpildyti atitinkamą kodą, kad jūsų pranešimai būtų registruojami duomenų bazėje.

Kaip matote, visos trys klasės - „FileLogger“, „EventLogger“ir „DBLogger“ - išplėsti abstrakčią pagrindinę klasę „LogBase“. Abstrakti pagrindinė klasė „LogBase“ deklaruoja vadinamąjį abstraktų metodą Žurnalas (). Žurnalas () metodas priima eilutę kaip parametrą; ši eilutė bus įrašyta į failą, duomenų bazę ar įvykių žurnalą.

C # LogHelper klasė

Dabar sukurkime pagalbininkų klasę, kuri gali būti naudojama iškviesti atitinkamą registratorių, remiantis perduotu parametru. Ši pagalbininkų klasė bus naudojama supaprastinti skambučius į Žurnalas () metodas kiekvienoje iš registravimo klasių. Šis kodo fragmentas iliustruoja šią pagalbininkų klasę.

viešoji statinė klasė „LogHelper“

    {

privatus statinis „LogBase“ registratorius = null;

public static void žurnalas („LogTarget“ taikinys, eilutės pranešimas)

        {

jungiklis (taikinys)

            {

atvejis „LogTarget.File“:

registratorius = new FileLogger ();

logger.Log (pranešimas);

pertrauka;

atvejis „LogTarget.Database“:

logger = naujas DBLogger ();

logger.Log (pranešimas);

pertrauka;

atvejis „LogTarget.EventLog“:

registratorius = new EventLogger ();

logger.Log (pranešimas);

pertrauka;

numatytas:

grįžti;

            }

        }

    }

Žurnalas () metodas „LogHelper“ klasė priima eilutę ir egzempliorių „LogTarget“ išvardijimas kaip parametrai. Tada jis naudoja a jungiklis: dėklas sukonstruoti nustatyti tikslą, kur bus užregistruotas tekstinis pranešimas.

Skambučių sinchronizavimas su C # Log metodu

Oi! Mes pamiršome sinchronizuoti skambučius su atitinkamais Žurnalas () metodai. Norėdami tai padaryti, turime naudoti užrakto raktinį žodį Žurnalas () metriką ir įtraukite atitinkamą kodą, kad tas sinchronizuotumėteŽurnalas () metodai. Žr „LogBase“ klasė pateikta žemiau. Įtraukėme apsaugotą narį, kuris bus naudojamas užraktui uždėti Žurnalas () kiekvienos išvestinės klasės metodas. Čia pateikiamos modifikuotos šių klasių versijos.

viešoji abstrakčioji klasė „LogBase“

    {

apsaugotas tik skaitomas objektas lockObj = naujas objektas ();

public abstract void Žurnalas (eilutės pranešimas);

    }

viešosios klasės „FileLogger“: „LogBase“

    {

viešosios eilutės failasPath = @ ”D: \ Log.txt”;

public override void Log (eilutės pranešimas)

        {

užraktas (lockObj)

            {

naudojant [StreamWriter streamWriter = new StreamWriter (filePath)]

                {

streamWriter.WriteLine (pranešimas);

streamWriter.Close ();

                }

            }

        }

    }

viešosios klasės „EventLogger“: „LogBase“

    {

public override void Log (eilutės pranešimas)

        {

užraktas (lockObj)

            {

„EventLog“ m_EventLog = naujas „EventLog“ („“);

m_EventLog.Source;

m_EventLog.WriteEntry (pranešimas);

            }

        }

    }

viešosios klasės „DBLogger“: „LogBase“

    {

string stringString = eilutė. Tuščias;

public override void Log (eilutės pranešimas)

        {

užraktas (lockObj)

            {

// Kodas registruoti duomenis į duomenų bazę

            }

        }

    }

Dabar galite paskambinti Žurnalas () metodas „LogHelper“ klasę ir perduoti žurnalo tikslą bei tekstinį pranešimą prisijungti kaip parametrus.

klasės programa

    {

static void Main (string [] args)

        {

„LogHelper.Log“ („LogTarget.File“, „Labas“);

        }

    }

Jei kada nors reikės užregistruoti teksto pranešimą prie kito žurnalo taikinio, tiesiog persiųskite atitinkamą žurnalo taikinį kaip parametrą Žurnalas () metodas „LogHelper“ klasė.

Yra daug būdų, kaip galėtumėte patobulinti šią registravimo sistemą. Galite įdiegti asinchroniją ir eilę, kad gautų daug pranešimų registruotojas galėtų šiuos pranešimus apdoroti asinchroniškai, neužblokuodamas dabartinės gijos. Taip pat galite įdiegti pranešimų kritiškumo lygius, pvz., Informacinius pranešimus, įspėjamuosius pranešimus, klaidų pranešimus ir pan.

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