English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dans ce tutoriel, nous allons apprendre le journalisation Java et ses divers composants à travers des exemples.
Java nous permet de créer et de capturer des messages et des fichiers de journal à travers le processus de journalisation.
En Java, l'enregistrement des journaux nécessite des cadres et des API. Java dispose d'un cadre d'enregistrement intégré dans le paquet java.util.logging.
Nous pouvons également utiliser des frameworks tiers (comme Log4j, Logback, etc.) sont utilisés pour la journalisation.
La figure suivante montre les composants principaux de l'API de journalisation Java (java.util.logging) et le flux spécifique.
La classe Logger fournit des méthodes de journalisation. Nous pouvons instancier un objet de la classe Logger et appeler ses méthodes pour enregistrer.
Laissons-nous donner un exemple.
Logger logger = Logger.getLogger("newLoggerName");
Logger.getLogger() de la classe Logger est utilisé pour trouver ou créer un nouveau Logger. Le paramètre en chaîne de caractères définit le nom du logger.
Ici, cela créera un nouveau Logger ou renverra un Logger avec le même nom.
Selon la convention, utilisez class.getName() pour définir un Logger après la classe actuelle.
Logger logger = Logger.getLogger(MyClass.class.getName());
Remarque :Si le nom passé est null, cette méthode lance une NullPointerException.
Chaque Logger a un niveau qui détermine l'importance des messages de journalisation. Il y a7de niveaux de journalisation de base :
Niveaux de journalisation (en ordre décroissant) | Use |
---|---|
SEVERE | Dégâts graves |
WARNING | Messages d'alerte, problèmes potentiels |
INFO | Informations d'exécution standard |
CONFIG | Informations de configuration |
FINE | Informations de développeur standard (messages de trace) |
FINER | Informations détaillées pour les développeurs (messages de trace) |
FINEST | Informations détaillées pour les développeurs (messages de trace) |
OFF | Fermer l'enregistrement de tous les niveaux de journalisation (ne capturer aucun contenu) |
ALL | Ouvrir l'enregistrement de tous les niveaux de journalisation (capturer tout le contenu) |
Chaque niveau de journalisation a une valeur entière qui détermine leur gravité, à l'exception des deux niveaux de journalisation spéciaux OFF et ALL.
Par défaut, les trois premiers niveaux de journalisation sont toujours enregistrés. Pour configurer d'autres niveaux, nous pouvons utiliser le code suivant :
logger.setLevel(Level.LogLevel); // Exemple logger.setLevel(Level.FINE);
Dans cet exemple, seules les niveaux de log Level.FINE et ceux au-dessus sont configurés pour l'enregistrement des journaux. Supprimez tous les autres messages de journalisation.
Il faut enregistrer un message de journalisation maintenant, nous utilisons la méthode log().
logger.log(Level.LogLevel, "log message"); // Exemple logger.log(Level.INFO, "C'est un message de niveau INFO de journal");
Il existe des méthodes abrégées pour enregistrer les niveaux nécessaires.
logger.info("C'est un message de niveau INFO de journal"); logger.warning("C'est un message de niveau WARNING de journal");
Ensuite, toutes les demandes de journal approuvées par le niveau de journal défini seront redirigées versLogRecord.
Remarque :Si le niveau d'un enregistreur de journal est réglé sur null, alors son niveau est hérité de son parent, et ainsi de suite.
le filtre (s'il existe) décide si LogRecord doit rediriger l'enregistrement de journal. Comme son nom l'indique, il filtre les messages de journal en fonction de critères spécifiques.
SiLogRecordSelon les conditions spécifiées, seules les entrées du journal passent du journalier au gestionnaire de journal, puis au système externe.
// Définir filter logger.setFilter(filter); // Obtenir filter Filter filter = logger.getFilter();
Les gestionnaires de journal ou les applications supplémentaires recevrontLogRecordet l'exporter vers diverses destinations.
Java SE fournit5gestionnaires intégrés :
gestionnaires | Use |
---|---|
StreamHandler | écrire dans OutputStream |
ConsoleHandler | écrire dans la console |
FileHandler | écrire dans un fichier |
SocketHandler | écrire sur un port TCP distant |
MemoryHandler | écrire en mémoire |
Les gestionnaires peuventLogRecordTransmis au filtre pour déterminer à nouveau s'il peut être redirigé vers un système externe.
Pour ajouter un nouveau gestionnaire, nous utilisons le code suivant :
logger.addHandler(handler); // Exemple Handler handler = new ConsoleHandler(); logger.addHandler(handler);
Pour supprimer le gestionnaire, nous utilisons le code suivant :
logger.removeHandler(handler); // Exemple Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler);
Un enregistreur peut avoir plusieurs gestionnaires. Pour obtenir tous les gestionnaires, nous utilisons le code suivant :
Handler[] handlers = logger.getHandlers();
Les gestionnaires peuvent également utiliserFormattermettreLogRecordobjetformatagepour les chaînes, puis l'exporter vers des systèmes externes.
Java SE dispose de deux fonctions intégréesFormatter:
Formatter | Use |
---|---|
SimpleFormatter | Format LogRecord into string |
XMLFormatter | Format LogRecord into XML format |
We can use the following code to format the handler:
// Formatted into string form handler.setFormatter(new SimpleFormatter()); // Formatted into XML format handler.setFormatter(new XMLFormatter());
Log managementGlobal records of information for object tracking. It reads and maintains log record configurations and logger instances.
The log manager is a singleton, which means only one instance is instantiated.
To get the instance of the log manager, we use the following code:
LogManager manager = new LogManager();
Here are some advantages of using Java logs.
Help monitor the flow of the program
Help capture any errors that may occur
Provide support for problem diagnosis and debugging