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

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

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

person Chris    schedule 08.01.2014    source источник
comment
doc.akka.io/docs/akka/2.3-M2/ java/logging.html ?   -  person ClojureMostly    schedule 08.01.2014
comment
Я прочитал страницу документа, но думаю, что она касается только ручного ведения журнала. С akka.io/faq akka.actor.debug.receive будет регистрировать все сообщения, отправленные актеру, если это Метод получения акторов — это LoggingReceive. Но я не мог понять, как применить LoggingReceive в Java.   -  person Chris    schedule 08.01.2014


Ответы (1)


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

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

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

if (getContext().system().settings().AddLoggingReceive())
  log.debug("received message of type {}", msg.getClass());
person Roland Kuhn    schedule 09.01.2014