Formule en java [Fermé]

Signaler
-
Messages postés
16331
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
8 mai 2021
-
Bonjour, svp j'ai une formule au niveau d'un programme que j'ai pas compris, pouvez vous me la détailler
catch (SQLException ex) {
Logger.getLogger(BDD.class.getName()).log(Level.SEVERE, null, ex);
}
Merci.

1 réponse

Messages postés
8554
Date d'inscription
lundi 21 décembre 2015
Statut
Membre
Dernière intervention
21 juillet 2020
588
Salut,

catch (SQLException ex) { 
Logger.getLogger(BDD.class.getName()).log(Level.SEVERE, null, ex); 
} 


Le catch s'active en cas d'erreur de code dans le try

D'après ce que je vois, le nom de la classe de l'instance BDD est extrait avec un log de niveau severe.
Messages postés
16331
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
8 mai 2021
2 826
"D'après ce que je vois, le nom de la classe de l'instance BDD est extrait avec un log de niveau severe."
Y a l'idée mais c'est pas tout à fait ça.

Logger.getLogger(BDD.class.getName())
récupère (ou créé si c'est la première fois) le logger identifié par le nom de la classe (dans une Map<String, Logger> ), cela permet donc de regrouper toutes les logs liées à cette classe (plutôt que se limiter à System.out et System.err)

log(Level.SEVERE, null, ex)
écrit dans le logger sélectionné une log de niveau SEVERE avec un message null (ce que je déconseille) et en écrivant la stack trace de l'exception 'ex'

Au final c'est assez proche d'un ex.printStackTrace() mais avec un logger (méthode à privilégier même si ceux par défaut de Java ne sont pas terribles)

Merci bcp, svp que signifie "un log de niveau severe"
Messages postés
16331
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
8 mai 2021
2 826
Une log c'est une ligne d'information, tu peux logger ce que tu veux.
Généralement une log commence par l'heure à laquelle le message a été écrit, le niveau de la log (debug, info, error...) suivi éventuellement d'informations supplémentaires sur l'exécution comme le nom du thread, le nom de la classe et/ou de la méthode (voire le numéro de ligne de code), etc. sans oublier bien sûr le message en lui même.

Il est également possible de logger des exceptions en cas d'erreur mais c'est au choix du développeur de dire si une exception est grave ou non. Dans ton cas on considère que c'est une erreur sévère, c'est l'un des plus hauts niveaux d'erreur, si tu as une erreur sévère dans tes logs cela indique que certaines fonctionnalités sont indisponibles (la base de données dans ton exemple)

Remarque : les noms des niveaux de logs varient d'une librairie à une autre, c'est juste une indication pour classer tes messages.
Il peut par exemple être utile de rajouter des messages de debug, qui indiqueront pas à pas des messages sur le déroulement du programme. Sachant que l'on peut configurer le niveau de log minimum à afficher donc on peut switcher sur un mode plus ou moins verbeux selon les besoins.
Messages postés
16331
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
8 mai 2021
2 826
Le mieux pour apprendre c'est encore d'expérimenter. Exemple :

package ccm;

import java.util.logging.*;

public class Test {

    private static final Logger LOG = Logger.getLogger("MyLogger");

    public static void main(String[] args) {
        // info
        LOG.log(Level.INFO, "My info 1");
        LOG.info("My info 2");

        // warn
        LOG.warning("My warning 1");
        LOG.log(Level.WARNING, "My warning 2");

        // severe
        try {
            throw new Exception("My exception");
        } catch (Exception e) {
            LOG.severe("My severe");
            LOG.log(Level.SEVERE, "My severe", e);
        }
    }
}

Résultat :

juin 29, 2016 9:30:00 PM ccm.Test main
INFOS: My info 1
juin 29, 2016 9:30:00 PM ccm.Test main
INFOS: My info 2
juin 29, 2016 9:30:00 PM ccm.Test main
AVERTISSEMENT: My warning 1
juin 29, 2016 9:30:00 PM ccm.Test main
AVERTISSEMENT: My warning 2
juin 29, 2016 9:30:00 PM ccm.Test main
GRAVE: My severe
juin 29, 2016 9:30:00 PM ccm.Test main
GRAVE: My severe
java.lang.Exception: My exception
	at ccm.Test.main(Test.java:20)

Le résultat par défaut est moche mais c'est configurable, même si les loggers par défaut de Java ne sont pas les plus faciles à utiliser.