记录Akka中的所有消息,而不修改所有接收方法

mir*_*lon 6 logging scala messages akka

我想将所有收到的消息记录到我的Akka应用程序中的所有演员.akka.actor.debug.receive如果actor接收方法是a,则有一个配置将记录发送给actor的所有消息LoggingReceive.

根据http://doc.akka.io/docs/akka/current/additional/faq.html,它表示包装所有接收方法,LoggingReceive如同如何记录来自Akka(Java)的所有传入消息

def receive = {
  LoggingReceive {
    case x ? // do something
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法隐式地或通过配置?

cmb*_*ter 5

不是我所知道的,但你应该很容易做到这样的事情:

trait LoggingReceiveActor extends Actor{

  def receive = LoggingReceive(loggedReceive)

  def loggedReceive:Receive
}

class MyActor extends LoggingReceiveActor{

  def loggedReceive = {
    case _ => 
  }
}
Run Code Online (Sandbox Code Playgroud)

LoggingReceiveActor现在开始继承的任何actor 必须提供impl loggingReceive,如果你这样做,那么当启用调试日志记录时,这种actor将记录收到的消息.

  • 仍然要修改所有演员。虽然一个简单的查找和替换就可以了。我认为查看所有消息将是调试的好方法......有没有更方便的方法来查看发生了什么? (2认同)