如何记录来自Akka(Java)的所有传入消息

Chr*_*ris 4 java scala actor akka

在Scala中,您可以使用LoggingReceive包装receive函数.您如何从Java API实现相同的目标?

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

Rol*_*uhn 7

Scala API具有LoggingReceive装饰器,因为部分函数文字使得在所有情况下表达要做的事情都很尴尬(比如这个日志记录).

在Java中,您没有遇到此问题,因为onReceive始终会调用您的方法,并且您可以在顶部放置一个日志记录语句,以查看该actor接收的所有消息.作为一个额外的奖励,你可以决定在哪个级别记录它们;-)

如果你想让你的日志记录以配置设置akka.actor.debug.receive为条件(就像Scala一样),那么你可以这样说

if (getContext().system().settings().AddLoggingReceive())
  log.debug("received message of type {}", msg.getClass());
Run Code Online (Sandbox Code Playgroud)