From 7e99f12f5d2356c3ca440894fff273e1cd818147 Mon Sep 17 00:00:00 2001 From: Peter Vlugter Date: Wed, 6 Apr 2011 15:55:42 +1200 Subject: [PATCH] Add simple stack trace to string method to AkkaException Note: we can't use printStackTrace in toString as it get's dizzy when we do this (we get an infinite loop). --- .../src/main/scala/akka/AkkaException.scala | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/akka-actor/src/main/scala/akka/AkkaException.scala b/akka-actor/src/main/scala/akka/AkkaException.scala index e60d2c448c..748df1ced0 100644 --- a/akka-actor/src/main/scala/akka/AkkaException.scala +++ b/akka-actor/src/main/scala/akka/AkkaException.scala @@ -5,25 +5,33 @@ package akka import akka.actor.newUuid - -import java.io.{StringWriter, PrintWriter} import java.net.{InetAddress, UnknownHostException} /** * Akka base Exception. Each Exception gets: * * * @author Jonas Bonér */ -@serializable abstract class AkkaException(message: String = "") extends { - val exceptionName = getClass.getName +class AkkaException(message: String = "") extends RuntimeException(message) with Serializable { val uuid = "%s_%s".format(AkkaException.hostname, newUuid) -} with RuntimeException(message) { - override lazy val toString = "%s\n\t[%s]\n\t%s".format(exceptionName, uuid, message) + + override lazy val toString = { + val name = getClass.getName + val trace = stackTraceToString + "%s: %s\n[%s]\n%s".format(name, message, uuid, trace) + } + + def stackTraceToString = { + val trace = getStackTrace + val sb = new StringBuffer + for (i <- 0 until trace.length) + sb.append("\tat %s\n" format trace(i)) + sb.toString + } } object AkkaException {