Logging

Il est très simple d'ajouter des messages de logging dans une application Jakarta EE. Ces messages peuvent être affichés et enregistrés dans un fichier, avec les logs du serveur d'application.

Le fait de les enregistrer dans un fichier permet à un développeur de mieux comprendre ce qui s'est passé après qu'un client lui a signalé un problème dans le fonctionnement de l'application. Le développeur peut se déplacer chez le client pour consulter le fichier, ou bien le client peut lui envoyer le fichier.

L'avantage de messages de log par rapport à un simple System.out.println (qui est aussi affiché avec les logs du serveur d'application), est que vous pouvez indiquer la "gravité" du message. Par exemple, un message peut être une simple information (INFO) pour indiquer qu'une étape s'est bien déroulée, ou bien un avertissement (WARNING) qu'un événement a lieu, ou bien un signalement d'erreur (ERROR) dans le déroulement de l'application. En configurant un fichier externe, il est possible d'indiquer quel niveau de gravité minimal provoquera la génération d'un message de logging.

Ce qui suit vous donne un rapide aperçu de la façon dont on peut générer des messages de logging.

Utilisation d'un Logger dans une classe

Un logger est un objet qui va permettre de générer des messages de logging.

Voici un exemple d'utilisation dans la classe de l'EJB Init. Pour illustrer ce qui vient d'être dit, le logger va générer un message d'information quand la base contient déjà des données et un message d'avertissement quand la base est vide et que des données sont ajoutées.

Un logger est créé en utilisant la méthode static getLogger de la classe Logger de Java SE. Il est d'usage de lui donner un nom qui correspond au nom complet de la classe qui l'utilise pour pouvoir, par la suite, configurer le niveau des messages affichés, classe par classe (par exemple si on veut plus de détails pendant l'exécution d'une classe pendant la recherche d'un bug). Ce nom est passé en paramètre de la méthode getLogger.

package xxxx.xxxxx.xxxx; // à modifier ici et dans les lignes qui suivent

import xxxx.xxxxx..entities.CompteBancaire;
import jakarta.annotation.PostConstruct;
import jakarta.inject.Inject;

import java.util.logging.Logger;

@ApplicationScoped
public class Init {
  
  private final static Logger logger = Logger.getLogger("xxxx.xxxxx.xxxx.Init");

  @Inject
  private GestionnaireCompte gestionnaireCompte;

  @Transactional
  public void initComptes(@Observes @Initialized(ApplicationScoped.class) ServletContext context) {
    if (gestionnaireCompte.nbComptes() != 0) {
      logger.info("La base de données n'est pas vide");
      return;
    }
    logger.warning("Aucun compte dans la base de données. Création de comptes");
    gestionnaireCompte.creerCompte(new CompteBancaire("John Lennon", 150000));
    gestionnaireCompte.creerCompte(new CompteBancaire("Paul McCartney", 950000));
    gestionnaireCompte.creerCompte(new CompteBancaire("Ringo Starr", 20000));
    gestionnaireCompte.creerCompte(new CompteBancaire("Georges Harrisson", 100000));
  }
}

Configuration du logging

Il y plusieurs façons de configurer le logging, par exemple pour indiquer le nom du fichier dans lequel les messages seront enregistrés, ou bien pour donner le niveau minimal pour la génération des messages de logging.

Quand on utilise Payara, le logging se configure dans la console d'administration de Payara (que vous avez déjà utilisée dans le TP 1 pour configurer la source de données).

Par exemple, pour indiquer le niveau minimal de génération des messages :

  1. Ouvrir la console d'administration de Payara.
  2. Configurations > server-config > Logger Settings.
  3. Onglet Log Levels.
  4. Clic sur "Add Logger" et donnez le nom complet de la classe Init. Vous pouvez aussi donner le nom du paquetage de base de votre application, ce qui englobera toutes les classes de votre application. Choisissez "INFO" pour le "Log Level".
  5. Clic sur Save

Lancez l'application. Dans les logs de Payara vous devriez voir le message "La base de données n'est pas vide". Ce message est aussi enregistré dans le fichier logs/server.log situé sous le répertoire glassfish/domains/domain1 du répertoire d'installation de Payara.

Modifiez le "Log Level" du logger que vous venez d'ajouter pour le passer à WARNING. Relancez l'application. Vous ne devriez plus voir le message.