J'ai une situation dans laquelle je veux imprimer toutes les exceptions prises dans le bloc catch à l'aide de l'enregistreur.
try {
File file = new File("C:\\className").mkdir();
fh = new FileHandler("C:\\className\\className.log");
logger.addHandler(fh);
logger.setUseParentHandlers(false);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
} catch (Exception e) {
logger.info(e);
}
j'ai reçu le journal des erreurs ne peut pas être appliqué à Java.io.Exception...
Ma préoccupation est que si je fais tant de choses dans le bloc try et que je ne garde qu'un seul bloc catch comme catch (Exception e), alors y a-t-il un moyen d'utiliser un enregistreur qui imprime tout type d'exception pris dans le bloc catch? Remarque: nous utilisons l'API Java.util.logging.Logger
Vous devriez probablement préciser quel enregistreur utilisez-vous.
L'interface org.Apache.commons.logging.Log
Possède la méthode void error(Object message, Throwable t)
(et la méthode void info(Object message, Throwable t)
), qui enregistre la trace de la pile avec votre message personnalisé. L'implémentation de Log4J a également cette méthode.
Donc, vous devez probablement écrire:
logger.error("BOOM!", e);
Si vous devez l'enregistrer avec le niveau INFO (cependant, cela peut être un cas d'utilisation étrange), alors:
logger.info("Just a stack trace, nothing to worry about", e);
J'espère que ça aide.
Utilisez: LOGGER.log(Level.INFO, "Got an exception.", e);
ou LOGGER.info("Got an exception. " + e.getMessage())
;
Essayez de consigner la trace de la pile comme ci-dessous:
logger.error("Exception :: " , e);
Vous pouvez utiliser cette méthode pour consigner la pile d'exceptions dans String
public String stackTraceToString(Throwable e) {
StringBuilder sb = new StringBuilder();
for (StackTraceElement element : e.getStackTrace()) {
sb.append(element.toString());
sb.append("\n");
}
return sb.toString();
}