2010-08-19 07:01:09 +02:00
|
|
|
/**
|
2010-12-22 15:35:50 +01:00
|
|
|
* Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
|
2010-08-19 07:01:09 +02:00
|
|
|
*/
|
|
|
|
|
|
2010-10-26 12:49:25 +02:00
|
|
|
package akka
|
2010-08-19 07:01:09 +02:00
|
|
|
|
2010-10-26 12:49:25 +02:00
|
|
|
import akka.actor.newUuid
|
2010-08-19 07:01:09 +02:00
|
|
|
import java.net.{InetAddress, UnknownHostException}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Akka base Exception. Each Exception gets:
|
|
|
|
|
* <ul>
|
2011-04-06 15:55:42 +12:00
|
|
|
* <li>a uuid for tracking purposes</li>
|
|
|
|
|
* <li>toString that includes exception name, message, uuid, and the stacktrace</li>
|
2010-08-19 07:01:09 +02:00
|
|
|
* </ul>
|
2010-08-21 16:13:16 +02:00
|
|
|
*
|
2010-08-19 07:01:09 +02:00
|
|
|
* @author <a href="http://jonasboner.com">Jonas Bonér</a>
|
|
|
|
|
*/
|
2011-04-06 15:55:42 +12:00
|
|
|
class AkkaException(message: String = "") extends RuntimeException(message) with Serializable {
|
2011-03-22 14:21:03 +01:00
|
|
|
val uuid = "%s_%s".format(AkkaException.hostname, newUuid)
|
2011-04-06 15:55:42 +12:00
|
|
|
|
|
|
|
|
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
|
|
|
|
|
}
|
2010-08-19 07:01:09 +02:00
|
|
|
}
|
|
|
|
|
|
2011-02-28 22:54:32 +01:00
|
|
|
object AkkaException {
|
2010-08-21 16:13:16 +02:00
|
|
|
val hostname = try {
|
2010-08-19 07:01:09 +02:00
|
|
|
InetAddress.getLocalHost.getHostName
|
|
|
|
|
} catch {
|
|
|
|
|
case e: UnknownHostException => "unknown"
|
|
|
|
|
}
|
|
|
|
|
}
|