Comment enregistrer une erreur dans la gestion des exceptions java.? [fermé]


Quelle méthode est la plus préférée (selon une bonne programmation) pour la production afin de déboguer facilement les erreurs.

LOG.error("Error message ",e);

OU

LOG.error("Error message "+e);

OU

LOG.error("Error message "+e.getMessage());
Author: Pawan Kumar, 2015-10-07

4 answers

Pourquoi ne pas simplement l'essayer? Vous êtes le seul à savoir de quelles informations avez-vous besoin dans votre journalisation. Selon l'exception levée, vous voudrez peut-être la stacktrace ou non.

Voir ci-dessous un petit exemple pour montrer les différentes sorties

private void logTest() {
    try {
        Files.readAllBytes(Paths.get("foobar"));
    } catch (IOException e) {
        logger.error("Error message ", e);
        logger.error("Error message " + e);
        logger.error("Error message " + e.getMessage());
    }
}

Enregistreur.erreur ("Message d'erreur", e);

2015-10-07 13:42:11,239 [main] ERROR sub.optimal.Main  - Error message 
java.nio.file.NoSuchFileException: foobar
    at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:79)
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
    at sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:230)
    at java.nio.file.Files.newByteChannel(Files.java:361)
    at java.nio.file.Files.newByteChannel(Files.java:407)
    at java.nio.file.Files.readAllBytes(Files.java:3152)
    at sub.optimal.Main.logTest(Main.java:43)
    at sub.optimal.Main.main(Main.java:53)

Enregistreur.erreur ("Message d'erreur" + e);

2015-10-07 13:42:11,243 [main] ERROR sub.optimal.Main  - Error message java.nio.file.NoSuchFileException: foobar

Enregistreur.erreur ("Message d'erreur" + e. getMessage());

2015-10-07 13:42:11,243 [main] ERROR sub.optimal.Main  - Error message foobar
 5
Author: SubOptimal, 2015-10-07 11:48:00

Utilisez LOG.error("Error message ",e); - de cette façon, vous ne perdrez pas la trace de pile de l'exception (notez que vous devez également vous assurer que la disposition de sortie de votre framework de journalisation est configurée de sorte qu'elle imprime les traces de pile).

Les traces de pile sont une partie précieuse du rapport d'exception car elles vous indiquent comment le code incriminé a été appelé et peuvent donc vous aider à comprendre dans quel état se trouvait votre programme lorsque l'erreur s'est produite.

Si, pour une raison quelconque, vous souhaitez enregistrer uniquement le message et non la pile trace, je recommanderais toujours d'utiliser le formulaire ci-dessus, puis de configurer le cadre de journalisation pour ne pas imprimer la trace de la pile (dans Log4j, cela se fait en configurant l'Appender). De cette façon, si vous changez d'avis plus tard, vous pouvez ajouter la trace de pile aux journaux en modifiant uniquement la configuration, sans avoir besoin de modifier le code de journalisation réel. Le choix des informations à mettre dans le journal doit être la responsabilité de la configuration de l'appender, pas du code qui enregistre l'entrée.

 2
Author: Jiri Tousek, 2015-10-07 13:34:01

Vous pouvez également utiliser:

logger.log(Level.INFO, "an exception was thrown", e);
 0
Author: , 2015-10-07 11:54:37

En Java

LOG.error("Error message ",e);

LOG.error("Error message "+e);

Vous passez l'objet exception qui invoquera l'implémentation to String

LOG.error("Error message "+e.getMessage());

Cela vous donnera le contenu de getMessage

 -1
Author: Sagar, 2015-10-07 12:07:43