Programmēšana

Kā ieviest vienkāršu reģistrētāju C #

Bieži vien vēlaties reģistrēt notikumus vai kļūdas, kādas tās rodas jūsu .Net lietojumprogrammā. Lai to izdarītu, jūs varētu izmantot kādu no daudzajiem populārajiem mežizstrādes ietvariem vai arī izveidot un izstrādāt savu mežizstrādes sistēmu. Šajā rakstā mēs redzēsim, kā mēs varam viegli izstrādāt un attīstīt savu mežizstrādes sistēmu, un veiksim soļus, lai izveidotu vienkāršu reģistrētāju C #.

Pirmkārt, jums būs jāsaprot žurnāla mērķi - dažādās vietās, kur datus varētu reģistrēt. Pieņemsim, ka mēs reģistrēsim datus fiksētos failos, datu bāzē un notikumu žurnālā. Šis uzskaitījums nosaka žurnāla mērķus, kurus mēs izmantotu šajā vienkāršajā sistēmā.

public enum LogTarget

    {

Fails, datu bāze, notikumu žurnāls

    }

C # mežizstrādātāja klases

Nākamais solis ir klases izstrāde un ieviešana. Mēs izmantosim trīs atšķirīgas klases - proti, FileLogger, DBLogger, un EventLogger- lai reģistrētu datus attiecīgi failā, datu bāzē un notikumu žurnālā. Visām šīm klasēm vajadzētu mantot nosaukto abstrakto pamatklasi LogBase. Lūk, kā šīs nodarbības tiek organizētas.

  publiskā abstraktā klase LogBase

    {

public abstract void Log (virknes ziņojums);

    }

publiskā klase FileLogger: LogBase

     {

publisks virknes failsPath = @ ”D: \ Log.txt”;

public override void Log (virknes ziņojums)

        {

izmantojot (StreamWriter streamWriter = jauns StreamWriter (filePath))

            {

streamWriter.WriteLine (ziņojums);

streamWriter.Close ();

            }           

        }

    }

publiskā klase DBLogger: LogBase

    {

string connectionString = virkne. Tukšs;

public override void Log (virknes ziņojums)

        {

// Kods datu reģistrēšanai datu bāzē

        }

    }

publiskā klase EventLogger: LogBase

    {

public override void Log (virknes ziņojums)

        {

EventLog eventLog = jauns EventLog (“”);

eventLog.Source;

eventLog.WriteEntry (ziņojums);

        }

    }                                

Esmu pametusi DBLogger klase nav pabeigta. Es atstāšu jums iespēju aizpildīt atbilstošo kodu, lai ziņojumus reģistrētu datu bāzē.

Kā redzat, visas trīs klases - FileLogger, EventLogger, un DBLogger - paplašināt abstraktās bāzes klasi LogBase. Abstraktā bāzes klase LogBase paziņo abstrakto metodi, ko sauc Žurnāls (). The Žurnāls () metode pieņem virkni kā parametru; šī virkne ir tā, kas tiks reģistrēta failā, datu bāzē vai notikumu žurnālā.

C # LogHelper klase

Tagad izveidosim palīgu klasi, kuru var izmantot, lai izsauktu attiecīgo reģistrētāju, pamatojoties uz nodoto parametru. Šī palīga klase tiks izmantota, lai vienkāršotu zvanus uz Žurnāls () metodi katrā no reģistrētāju klasēm. Šis koda fragments ilustrē šo palīgu klasi.

publiskā statiskā klase LogHelper

    {

privāts statisks LogBase reģistrētājs = null;

public static void Log (LogTarget mērķis, virknes ziņojums)

        {

slēdzis (mērķis)

            {

gadījums LogTarget.File:

reģistrētājs = jauns FileLogger ();

logger.Log (ziņojums);

pārtraukums;

gadījums LogTarget.Database:

reģistrētājs = jauns DBLogger ();

logger.Log (ziņojums);

pārtraukums;

gadījums LogTarget.EventLog:

reģistrētājs = new EventLogger ();

logger.Log (ziņojums);

pārtraukums;

noklusējums:

atgriešanās;

            }

        }

    }

The Žurnāls () metode LogHelper klase pieņem virkni un LogTarget uzskaitījums kā parametri. Tad tā izmanto a slēdzis: korpuss konstruēt, lai noteiktu mērķi, kur tiks reģistrēts īsziņa.

Zvanu sinhronizēšana ar metodi C # Log

Hmm ... Mēs aizmirsām sinhronizēt zvanus ar attiecīgajiem Žurnāls () metodes. Lai to izdarītu, mums jāizmanto bloķēšanas atslēgvārds Žurnāls () katras reģistrētāja klases metodi un iekļauj atbilstošo kodu, lai tās sinhronizētuŽurnāls () metodes. Skatiet LogBase klase, kas norādīta zemāk. Mēs esam iekļāvuši aizsargātu biedru, kas tiks izmantots, lai bloķētu Žurnāls () katras atvasinātās klases metode. Šeit ir šo klašu modificētās versijas.

publiskā abstraktā klase LogBase

    {

aizsargāts tikai lasāms objekts lockObj = jauns objekts ();

public abstract void Log (virknes ziņojums);

    }

publiskā klase FileLogger: LogBase

    {

publisks virknes failsPath = @ ”D: \ Log.txt”;

public override void Log (virknes ziņojums)

        {

slēdzene (lockObj)

            {

izmantojot (StreamWriter streamWriter = jauns StreamWriter (filePath))

                {

streamWriter.WriteLine (ziņojums);

streamWriter.Close ();

                }

            }

        }

    }

publiskā klase EventLogger: LogBase

    {

public override void Log (virknes ziņojums)

        {

slēdzene (lockObj)

            {

EventLog m_EventLog = jauns EventLog (“”);

m_EventLog.Source;

m_EventLog.WriteEntry (ziņojums);

            }

        }

    }

publiskā klase DBLogger: LogBase

    {

string connectionString = virkne. Tukšs;

public override void Log (virknes ziņojums)

        {

slēdzene (lockObj)

            {

// Kods datu reģistrēšanai datu bāzē

            }

        }

    }

Tagad jūs varat piezvanīt uz Žurnāls () metode LogHelper klasē un nododiet žurnāla mērķi un īsziņu, lai reģistrētos kā parametrus.

klases programma

    {

static void Main (virkne [] args)

        {

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

        }

    }

Ja jums kādreiz ir jāreģistrē īsziņa citam žurnāla mērķim, jūs vienkārši pārsūtīsit atbilstošo žurnāla mērķi kā parametru Žurnāls () metode LogHelper klasē.

Ir daudz veidu, kā jūs varētu uzlabot šo reģistrēšanas sistēmu. Jūs varētu ieviest asinhroniju un rindu, lai, saņemot lielu ziņojumu skaitu, reģistrētājs varētu šos ziņojumus apstrādāt asinhroni, nebloķējot pašreizējo pavedienu. Varat arī ieviest ziņojumu kritiskuma līmeņus, piemēram, informatīvos ziņojumus, brīdinājuma ziņojumus, kļūdu ziņojumus utt.

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