0
我可以通過隱式設置在Akka actor中記錄日誌嗎?我想登錄演員。我的代碼如下:如何使用Logging入Akka actor?
object EmployeeRouterActor {
final case class Employee(id: Long, name: String)
final case object StopChild
final case class ChildResponse(id: Long, name: String)
}
final class EmployeeRouterActor extends Actor with akka.actor.ActorLogging {
import EmployeeRouterActor._
private var children = Map.empty[Long, ActorRef]
override def receive: Receive = {
case e @ Employee(id, _) => {
getChild(id) ! e
}
case r @ ChildResponse(id, _) => {
stopChild(id)
val idItem = r.id
val nameItem = r.name
sender ! s"Employee {$idItem} is $nameItem."
}
}
private def getChild(id: Long): ActorRef =
context.child(id.toString).getOrElse {
val child = context.actorOf(EmployeeEchoActor.apply(), id.toString)
children += (id -> child)
child
}
private def stopChild(id: Long) = {
children(id) ! StopChild
children -= id
}
}
但是,在這種情況下,我不能做這樣的事情:
class EmployeeRouterActor (implicit logger: LoggingAdapter) { ... }
我有以下錯誤:
Error:(10, 30) could not find implicit value for parameter logger: akka.event.LoggingAdapter
def apply(): Props = Props(new EmployeeEchoActor)
Error:(10, 30) not enough arguments for constructor EmployeeEchoActor: (implicit logger: akka.event.LoggingAdapter)actors.EmployeeEchoActor.
Unspecified value parameter logger.
def apply(): Props = Props(new EmployeeEchoActor)
是它可以在演員中使用來自Akka的Logging嗎?
object EmployeeEchoActor {
def apply(): Props = Props(new EmployeeEchoActor)
}
class EmployeeEchoActor(implicit logger: LoggingAdapter) extends Actor {
override def receive = {
case employee: EmployeeRouterActor.Employee => {
logger.info("Message received!")
val idItem = employee.id
val nameItem = employee.name
context.parent ! EmployeeRouterActor.ChildResponse(idItem, nameItem)
}
case EmployeeRouterActor.StopChild => {
logger.info("Stopping :(!")
context.stop(self)
}
case _ => sender ! "Internal Error!"
}
}
如下面給出的
EmployeeEchoActor(兒童演員)被定義你在創建'EmployeeEchoActor'的地方有一個'implicit val LoggingAdapter'並將它傳遞給t他是'Props'構造函數? – Harald
我剛剛更新了帖子以顯示EmployeeEchoActor。我通過Logging,但我不知道如何重構Porps構造函數。這是我第一次在Akka,在Google或這裏找不到類似的東西。 –
您是否看過此頁? http://doc.akka.io/docs/akka/2.0/scala/logging.html – Harald