Scala: imprimer une trace de pile dans mon Scalatra app
Semble assez simple problème, mais j'aimerais enregistrer une trace de la pile lors de mon top niveau gestionnaire d'erreurs dans Scalatra est déclenchée. Je suis volontairement lancer une exception dans l'un de mes méthodes, en faisant quelque chose d'aussi insignifiant qu':
throw new IllegalArgumentException
Dans le gestionnaire d'erreur, le code se présente comme suit:
error {
case e => {
val logger = LoggerFactory.getLogger(getClass)
logger.info("an exception occurred: " + e.getStackTrace())
logger.info("the request body is: " + request)
NotFound("An error occurred, please contact support")
}
}
Le gestionnaire d'erreur lui-même est Scalatra spécifique, mais je suis sûr de la réponse, je suis à la recherche peut être résolu à l'aide de vanille Scala technique. Il y a une chose que je peux faire à ce point de saisir la stacktrace? Je ne suis pas sûr si la demande est sur le même thread que le gestionnaire d'erreur, sinon il pourrait y avoir une réponse. e.getStackTrace()
me donne [Ljava.lang.StackTraceElement;@1f6b6954
Quelle est la meilleure façon d'obtenir une trace de la pile d'ici imprimé, donc je peux me connecter et de le réviser afin de corriger les erreurs dans mon terrible code?
OriginalL'auteur randombits | 2013-09-18
Vous devez vous connecter pour publier un commentaire.
Je pense que vous voulez printStackTrace() plutôt que getStackTrace. Si vous êtes de la sortie à un fichier journal, getMessage() peut être utile. Ou vous pouvez essayer de passer l'ensemble de l'objet exception à l'enregistreur de données.
OriginalL'auteur James Adam
Utilisation ExceptionUtils de Apache Commons Lang:
OriginalL'auteur Fernando Correia
Si vous utilisez l'enregistreur: com.typesafe.scalalogging.Enregistreur l'enregistreur imprime la trace de la pile pour vous.
Vous pouvez simplement l'utiliser de cette façon:
Il y a déjà une surcharge qui accepte 2 paramètres, de Cordes et de Throwable.
J'ai édité la réponse de fournir un exemple complet
OriginalL'auteur dsantaolalla
Cette question a plusieurs façons de convertir une trace de pile d'exception à une Chaîne. printStackTrace sorties du Système.err, à moins de fournir un écrivain.
OriginalL'auteur Kelsey Gilmore-Innis