Προγραμματισμός

Πώς να εφαρμόσετε έναν απλό καταγραφέα στο C #

Συχνά θα θέλετε να καταγράφετε συμβάντα ή σφάλματα όπως αυτά εμφανίζονται στην εφαρμογή .Net. Για να το κάνετε αυτό, θα μπορούσατε να επωφεληθείτε από ένα από τα πολλά δημοφιλή πλαίσια καταγραφής που διατίθενται ή μπορείτε να σχεδιάσετε και να αναπτύξετε το δικό σας πλαίσιο καταγραφής. Σε αυτό το άρθρο θα δούμε πώς μπορούμε να σχεδιάσουμε και να αναπτύξουμε το δικό μας πλαίσιο καταγραφής με ευκολία και να ακολουθήσουμε τα βήματα για να δημιουργήσουμε έναν απλό καταγραφέα στο C #.

Πρώτα απ 'όλα, θα πρέπει να κατανοήσετε τους στόχους καταγραφής - τα διάφορα μέρη όπου τα δεδομένα θα μπορούσαν να καταγραφούν. Ας υποθέσουμε ότι θα καταγράψουμε τα δεδομένα σε επίπεδα αρχεία, μια βάση δεδομένων και το αρχείο καταγραφής συμβάντων. Η ακόλουθη απαρίθμηση καθορίζει τους στόχους καταγραφής που θα χρησιμοποιούσαμε σε αυτό το απλό πλαίσιο.

public enum LogTarget

    {

Αρχείο, βάση δεδομένων, EventLog

    }

Μαθήματα C # logger

Το επόμενο βήμα είναι να σχεδιάσετε και να εφαρμόσετε τις τάξεις. Θα χρησιμοποιήσουμε τρεις διαφορετικές κατηγορίες - δηλαδή, FileLogger, DBLogger, και EventLogger—Για καταγραφή δεδομένων σε αρχείο, βάση δεδομένων και αρχείο καταγραφής συμβάντων αντίστοιχα. Όλες αυτές οι τάξεις πρέπει να κληρονομήσουν την αφηρημένη βασική κλάση που ονομάζεται LogBase. Δείτε πώς οργανώνονται αυτά τα μαθήματα.

  δημόσια αφηρημένη τάξη LogBase

    {

δημόσιο κενό αφηρημένο αρχείο καταγραφής (μήνυμα συμβολοσειράς).

    }

δημόσια τάξη FileLogger: LogBase

     {

public string filePath = @ "D: \ Log.txt";

δημόσια παράκαμψη άκυρο Log (μήνυμα συμβολοσειράς)

        {

χρησιμοποιώντας (StreamWriter streamWriter = νέο StreamWriter (filePath))

            {

streamWriter.WriteLine (μήνυμα);

streamWriter.Close ();

            }           

        }

    }

δημόσια κλάση DBLogger: LogBase

    {

string connectionString = string.Empty;

δημόσια παράκαμψη κενού Log (μήνυμα συμβολοσειράς)

        {

// Κωδικός για καταγραφή δεδομένων στη βάση δεδομένων

        }

    }

δημόσια τάξη EventLogger: LogBase

    {

δημόσια παράκαμψη άκυρο Log (μήνυμα συμβολοσειράς)

        {

EventLog eventLog = νέο EventLog (“”);

eventLog.Source;

eventLog.WriteEntry (μήνυμα);

        }

    }                                

Έχω αφήσει το DBLogger ημιτελής τάξη. Θα σας αφήσω να συμπληρώσετε τον κατάλληλο κωδικό για να καταγράψετε τα μηνύματά σας στη βάση δεδομένων.

Όπως μπορείτε να δείτε, και τα τρία μαθήματα - FileLogger, EventLogger, και DBLogger - επέκταση της κατηγορίας αφηρημένης βάσης LogBase. Η αφηρημένη βασική τάξη LogBase δηλώνει την αφηρημένη μέθοδο που ονομάζεται Κούτσουρο(). ο Κούτσουρο() Η μέθοδος δέχεται μια συμβολοσειρά ως παράμετρο. αυτή η συμβολοσειρά είναι αυτό που θα καταγραφεί σε ένα αρχείο ή μια βάση δεδομένων ή στο αρχείο καταγραφής συμβάντων.

Η τάξη C # LogHelper

Τώρα ας δημιουργήσουμε μια βοηθητική τάξη που μπορεί να χρησιμοποιηθεί για την επίκληση του αντίστοιχου καταγραφέα βάσει της παραμέτρου που έχει περάσει. Αυτή η κατηγορία βοηθών θα χρησιμοποιηθεί για να απλοποιήσει τις κλήσεις προς το Κούτσουρο() μέθοδο σε κάθε μία από τις κλάσεις καταγραφέα. Το παρακάτω απόσπασμα κώδικα απεικονίζει αυτήν την κατηγορία βοηθών.

δημόσια στατική τάξη LogHelper

    {

ιδιωτικό στατικό LogBase logger = null;

δημόσιο στατικό void Log (στόχος LogTarget, μήνυμα συμβολοσειράς)

        {

διακόπτης (στόχος)

            {

υπόθεση LogTarget.File:

logger = νέο FileLogger ();

logger.Log (μήνυμα);

Διακοπή;

υπόθεση LogTarget.Database:

καταγραφέας = νέο DBLogger ();

logger.Log (μήνυμα);

Διακοπή;

υπόθεση LogTarget.EventLog:

logger = νέο EventLogger ();

logger.Log (μήνυμα);

Διακοπή;

Προκαθορισμένο:

ΕΠΙΣΤΡΟΦΗ;

            }

        }

    }

ο Κούτσουρο() μέθοδος του LogHelper κλάση δέχεται μια συμβολοσειρά και μια παρουσία του LogTarget απαρίθμηση ως παράμετροι. Στη συνέχεια χρησιμοποιεί ένα διακόπτης: θήκη κατασκευάστε για να προσδιορίσετε τον στόχο όπου θα καταγραφεί το μήνυμα κειμένου.

Συγχρονισμός κλήσεων στη μέθοδο C # Log

Ωχ! Ξεχάσαμε να συγχρονίσουμε τις κλήσεις με τις αντίστοιχες Κούτσουρο() μεθόδους. Για να γίνει αυτό, πρέπει να χρησιμοποιήσουμε τη λέξη κλειδί κλειδώματος στο Κούτσουρο() μέθοδος καθεμιάς από τις κλάσεις καταγραφέα και ενσωματώνει τον κατάλληλο κωδικό για συγχρονισμό αυτώνΚούτσουρο() μεθόδους. Αναφέρομαι στο Βάση Log τάξη που δίνεται παρακάτω. Έχουμε ενσωματώσει ένα προστατευμένο μέλος που θα χρησιμοποιηθεί για την εφαρμογή της κλειδαριάς στο Κούτσουρο() μέθοδο καθεμιάς από τις παραγόμενες τάξεις. Εδώ είναι οι τροποποιημένες εκδόσεις αυτών των τάξεων.

δημόσια αφηρημένη τάξη LogBase

    {

προστατευμένο αντικείμενο readonly lockObj = νέο αντικείμενο ();

δημόσιο κενό αφηρημένο αρχείο καταγραφής (μήνυμα συμβολοσειράς).

    }

δημόσια τάξη FileLogger: LogBase

    {

public string filePath = @ "D: \ Log.txt";

δημόσια παράκαμψη άκυρο Log (μήνυμα συμβολοσειράς)

        {

κλειδαριά (lockObj)

            {

χρησιμοποιώντας (StreamWriter streamWriter = νέο StreamWriter (filePath))

                {

streamWriter.WriteLine (μήνυμα);

streamWriter.Close ();

                }

            }

        }

    }

δημόσια τάξη EventLogger: LogBase

    {

δημόσια παράκαμψη άκυρο Log (μήνυμα συμβολοσειράς)

        {

κλειδαριά (lockObj)

            {

EventLog m_EventLog = νέο EventLog (“”);

m_EventLog.Source;

m_EventLog.WriteEntry (μήνυμα);

            }

        }

    }

δημόσια κλάση DBLogger: LogBase

    {

string connectionString = string.Empty;

δημόσια παράκαμψη κενού Log (μήνυμα συμβολοσειράς)

        {

κλειδαριά (lockObj)

            {

// Κωδικός για καταγραφή δεδομένων στη βάση δεδομένων

            }

        }

    }

Τώρα μπορείτε να καλέσετε το Κούτσουρο() μέθοδος του LogHelper τάξη και να περάσει το στόχο καταγραφής και το μήνυμα κειμένου για να καταγραφούν ως παράμετροι.

Πρόγραμμα τάξης

    {

static void Main (συμβολοσειρά [] args)

        {

LogHelper.Log (LogTarget.File, "Γεια σας");

        }

    }

Εάν χρειαστεί ποτέ να καταγράψετε το μήνυμα κειμένου σε διαφορετικό στόχο καταγραφής, απλά θα περάσετε τον κατάλληλο στόχο καταγραφής ως παράμετρο στο Κούτσουρο() μέθοδος του LogHelper τάξη.

Υπάρχουν πολλοί τρόποι για να βελτιώσετε αυτό το πλαίσιο καταγραφής. Θα μπορούσατε να εφαρμόσετε ασύγχρονο και μια ουρά έτσι ώστε όταν φτάνουν μεγάλοι αριθμοί μηνυμάτων, ο καταγραφέας μπορεί να επεξεργαστεί αυτά τα μηνύματα ασύγχρονα χωρίς να χρειάζεται να μπλοκάρει το τρέχον νήμα. Μπορεί επίσης να θέλετε να εφαρμόσετε επίπεδα κρίσιμης σημασίας μηνυμάτων, όπως ενημερωτικά μηνύματα, προειδοποιητικά μηνύματα, μηνύματα σφάλματος και ούτω καθεξής.