69

So, if I have an actor, I can give it a name. But, can I access that name internally? Example:

class Actorz extends Actor with ActorLogging {
   val actorName = //??What function

   def receive = {
     case x => log.debug(actorName+": Received Message: "+x)
   }
}

val actor = system.actorOf(Props[Actorz], "named")
actor ! "dogs"

Now, I can pass its name as a constructor parameter. But, that seems like unnecessary duplication if there is a way to get the name internally... as it was set when I instantiated the actor using system.actorOf. API docs didn't seem to have anything.

Chris Martin
  • 30,334
  • 10
  • 78
  • 137
Dante Romero
  • 1,234
  • 1
  • 8
  • 9
  • Why do you need actor's `name` if you are using `ActorLogging`? Logger provides by default all required information about actor to detect one. – Sergii Sep 12 '19 at 10:28

1 Answers1

101

From an Actor you can use self to get the ActorRef.

val actorName = self.path.name

http://doc.akka.io/api/akka/2.2.3/#akka.actor.Actor

http://doc.akka.io/api/akka/2.2.3/#akka.actor.ActorRef

http://doc.akka.io/api/akka/2.2.3/#akka.actor.ActorPath

Chris Martin
  • 30,334
  • 10
  • 78
  • 137