Καταγραφή Java

Σε αυτό το σεμινάριο, θα μάθουμε για την καταγραφή Java και τα διάφορα στοιχεία της με τη βοήθεια παραδειγμάτων.

Η Java μας επιτρέπει να δημιουργούμε και να καταγράφουμε μηνύματα και αρχεία καταγραφής μέσω της διαδικασίας καταγραφής.

Στην Java, η καταγραφή απαιτεί πλαίσια και API. Η Java διαθέτει ένα ενσωματωμένο πλαίσιο καταγραφής στο java.util.loggingπακέτο.

Μπορούμε επίσης να χρησιμοποιήσουμε πλαίσια τρίτων, όπως Log4j, Logback και πολλά άλλα για σκοπούς καταγραφής.

Στοιχεία καταγραφής Java

Το παρακάτω σχήμα αντιπροσωπεύει τα βασικά στοιχεία και τη ροή ελέγχου του Java Logging API ( java.util.logging).

Καταγραφή Java

1. Καταγραφέας

Η Loggerτάξη παρέχει μεθόδους καταγραφής. Μπορούμε να δημιουργήσουμε αντικείμενα από την Loggerτάξη και να καλέσουμε τις μεθόδους της για σκοπούς καταγραφής.

Ας πάρουμε ένα παράδειγμα.

 Logger logger = Logger.getLogger("newLoggerName"); 

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

Εδώ, δημιουργεί ένα νέο Loggerαντικείμενο ή επιστρέφει ένα υπάρχον Loggerμε το ίδιο όνομα.

Είναι μια σύμβαση για να ορίσετε ένα Loggerμετά την τρέχουσα τάξη χρησιμοποιώντας class.getName().

 Logger logger = Logger.getLogger(MyClass.class.getName()); 

Σημείωση: Αυτή η μέθοδος θα ρίξει NullPointerExceptionαν το περάσει όνομα είναι null.

Κάθε Loggerένα έχει ένα επίπεδο που καθορίζει τη σημασία του μηνύματος καταγραφής. Υπάρχουν 7 βασικά επίπεδα καταγραφής:

Επίπεδο καταγραφής (σε φθίνουσα σειρά) Χρήση
ΑΥΣΤΗΡΟΣ σοβαρή αποτυχία
ΠΡΟΕΙΔΟΠΟΙΗΣΗ προειδοποιητικό μήνυμα, ένα πιθανό πρόβλημα
ΠΛΗΡΟΦΟΡΙΕΣ γενικές πληροφορίες χρόνου εκτέλεσης
ΔΙΑΜΟΡΦΩΣΗ πληροφορίες διαμόρφωσης
ΠΡΟΣΤΙΜΟ γενικές πληροφορίες προγραμματιστή (εντοπισμός μηνυμάτων)
ΠΙΟ ΚΑΛΗ λεπτομερείς πληροφορίες προγραμματιστή (εντοπισμός μηνυμάτων)
ΚΑΛΥΤΕΡΟ πολύ λεπτομερείς πληροφορίες προγραμματιστή (εντοπισμός μηνυμάτων)
ΜΑΚΡΙΑ ΑΠΟ απενεργοποιήστε την καταγραφή για όλα τα επίπεδα (δεν καταγράφετε τίποτα)
ΟΛΑ ενεργοποιήστε την καταγραφή για όλα τα επίπεδα (καταγραφή όλων)

Κάθε επίπεδο καταγραφής έχει μια ακέραια τιμή που καθορίζει τη σοβαρότητά τους εκτός από δύο ειδικά επίπεδα καταγραφής OFFκαι ALL.

Καταγραφή του μηνύματος

Από προεπιλογή, τα τρία πρώτα επίπεδα καταγραφής καταγράφονται πάντα. Για να ορίσουμε ένα διαφορετικό επίπεδο, μπορούμε να χρησιμοποιήσουμε τον ακόλουθο κώδικα:

 logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE); 

Σε αυτό το παράδειγμα, μόνο επίπεδο FINEκαι επίπεδα πάνω από αυτό έχουν οριστεί για καταγραφή. Όλα τα άλλα μηνύματα καταγραφής απορρίπτονται.

Τώρα για να καταγράψετε ένα μήνυμα, χρησιμοποιούμε τη log()μέθοδο.

 logger.log(Level.LogLevel, "log message"); // example logger.log(Level.INFO, "This is INFO log level message"); 

Υπάρχουν σύντομες μέθοδοι για την καταγραφή στα επιθυμητά επίπεδα.

 logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message"); 

Όλα τα αιτήματα καταγραφής που έχουν περάσει το καθορισμένο επίπεδο καταγραφής προωθούνται στο LogRecord .

Σημείωση: Εάν το επίπεδο καταγραφέα έχει οριστεί σε null, το επίπεδο κληρονομείται από τον γονέα του και ούτω καθεξής στο δέντρο.

2. Φίλτρα

Ένα φίλτρο (εάν υπάρχει) καθορίζει εάν το LogRecord πρέπει να προωθηθεί ή όχι. Όπως υποδηλώνει το όνομα, φιλτράρει τα μηνύματα καταγραφής σύμφωνα με συγκεκριμένα κριτήρια.

Ένα LogRecord μεταβιβάζεται μόνο από τον καταγραφέα στον χειριστή καταγραφής και από τον διαχειριστή καταγραφής σε εξωτερικά συστήματα εάν πληροί τα καθορισμένα κριτήρια.

 // set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter(); 

3. Χειριστές (Παραρτήματα)

Ο διαχειριστής καταγραφής ή οι προσαρτητές λαμβάνουν το LogRecord και το εξάγουν σε διάφορους στόχους.

Το Java SE παρέχει 5 ενσωματωμένους χειριστές:

Χειριστές Χρήση
StreamHandler γράφει σε ένα OutputStream
ConsoleHandler γράφει στην κονσόλα
FileHandler γράφει στο αρχείο
SocketHandler γράφει σε απομακρυσμένες θύρες TCP
MemoryHandler γράφει στη μνήμη

Ένας χειριστής μπορεί να περάσει το LogRecord σε ένα φίλτρο για να καθορίσει ξανά εάν μπορεί να προωθηθεί σε εξωτερικά συστήματα ή όχι.

Για να προσθέσουμε έναν νέο χειριστή, χρησιμοποιούμε τον ακόλουθο κώδικα:

 logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); 

Για να αφαιρέσουμε ένα πρόγραμμα χειρισμού, χρησιμοποιούμε τον ακόλουθο κώδικα:

 logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler); 

Ένας καταγραφέας μπορεί να έχει πολλούς χειριστές. Για να λάβουμε όλους τους χειριστές, χρησιμοποιούμε τον ακόλουθο κωδικό:

 Handler() handlers = logger.getHandlers(); 

4. Μορφοποιητές

Ένας χειριστής μπορεί επίσης να χρησιμοποιήσει έναν μορφοποιητή για να μορφοποιήσει το αντικείμενο LogRecord σε μια συμβολοσειρά πριν το εξαγάγει σε εξωτερικά συστήματα.

Η Java SE διαθέτει δύο ενσωματωμένους μορφοποιητές :

Μορφοποιητές Χρήση
SimpleFormatter μορφές LogRecord σε συμβολοσειρά
XMLFormatter μορφές LogRecord σε μορφή XML

Μπορούμε να χρησιμοποιήσουμε τον ακόλουθο κώδικα για τη μορφοποίηση ενός χειριστή:

 // formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter()); 

LogManager

Το αντικείμενο LogManager παρακολουθεί τις καθολικές πληροφορίες καταγραφής. Διαβάζει και διατηρεί τη διαμόρφωση καταγραφής και τις παρουσίες καταγραφής.

Ο διαχειριστής αρχείων καταγραφής είναι ένας απλός, πράγμα που σημαίνει ότι μόνο μία παρουσία του δημιουργείται.

Για να λάβουμε την παρουσία διαχειριστή καταγραφής, χρησιμοποιούμε τον ακόλουθο κώδικα:

 LogManager manager = new LogManager(); 

Πλεονεκτήματα της καταγραφής

Εδώ είναι μερικά από τα πλεονεκτήματα της σύνδεσης στο Java.

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

ενδιαφέροντα άρθρα...