Как регистрировать все входящие сообщения от Akka (Java)

В Scala вы можете заключить функцию приема в LoggingReceive. Как добиться того же от Java API?

def receive = {
  LoggingReceive {
    case x ⇒ // do something
  }
}

1 ответ

Решение

Scala API имеет LoggingReceive decorator, потому что литерал частичной функции делает неудобным выражение чего-либо, что должно быть сделано во всех случаях (например, это ведение журнала).

В Java у вас нет этой проблемы, потому что ваш onReceive метод вызывается всегда, и вы можете поместить оператор регистрации вверху, чтобы увидеть все сообщения, которые получает актер. В качестве дополнительного бонуса вы можете решить, на каком уровне их регистрировать;-)

Если вы хотите сделать логирование условным на настройке конфигурации akka.actor.debug.receive (так же, как для Scala), то вы можете сказать, например,

if (getContext().system().settings().AddLoggingReceive())
  log.debug("received message of type {}", msg.getClass());
Другие вопросы по тегам