Java Language Piège - Empilement excessif ou inapproprié


Exemple

Une des choses les plus ennuyeuses que les programmeurs puissent faire est de disperser les appels à printStackTrace() dans tout leur code.

Le problème est que printStackTrace() va écrire le stacktrace sur la sortie standard.

  • Pour une application destinée aux utilisateurs finaux qui ne sont pas des programmeurs Java, un stacktrace est, au mieux, non informatif et au pire alarmant.

  • Pour une application côté serveur, il y a des chances que personne ne regarde la sortie standard.

Une meilleure idée est de ne pas appeler directement printStackTrace ou, si vous l'appelez, de le faire de manière à ce que la trace de la pile soit écrite dans un fichier journal ou un fichier d'erreur plutôt que sur la console de l'utilisateur final.

Pour ce faire, vous pouvez utiliser une structure de journalisation et transmettre l'objet exception en tant que paramètre de l'événement de journal. Cependant, même l'enregistrement de l'exception peut être nuisible si elle est effectuée de manière abusive. Considérer ce qui suit:

public void method1() throws SomeException {
    try {
        method2();
        // Do something
    } catch (SomeException ex) {
        Logger.getLogger().warn("Something bad in method1", ex);
        throw ex;
    }
}

public void method2() throws SomeException {
    try {
        // Do something else
    } catch (SomeException ex) {
        Logger.getLogger().warn("Something bad in method2", ex);
        throw ex;
    }
}

Si l'exception est method2 dans method2 , vous êtes susceptible de voir deux copies de la même trace dans le fichier journal, correspondant au même échec.

En bref, consignez l'exception ou relancez-la (éventuellement avec une autre exception). Ne faites pas les deux.