Как отключить предупреждения Akka Dead Letters в тестах

#akka #akka-stream #akka-testkit

#akka #akka-stream #akka-testkit

Вопрос:

Недавно я обновился до Akka 2.6.10. Теперь я вижу много подобных предупреждений, когда я запускаю тесты для своих актеров с ActorTestKit :

 [WARN] [12/16/2020 09:03:14.995] [AsyncTestWithControlledTime-akka.actor.internal-dispatcher-3] [akka://AsyncTestWithControlledTime/user/$a] received dead letter: GotCriticalFailure(my custom error message,akka.stream.AbruptStageTerminationException: GraphStage [akka.stream.impl.ActorRefSinkStage$anon$1@15cc9eaa] terminated abruptly, caused by for example materializer or actor system termination.)
 

AyncTestWithControlledTime — это класс, который я написал, и он является суперклассом всех моих тестов. Он создает тестовый набор и предоставляет конфигурацию для системы actor. Однако попытка подавить предупреждения через конфигурацию, например, с akka.log-dead-letters = off помощью, не помогает.

Обычно я получаю предупреждения, когда мой актер подписался на поток, и тест заканчивается, поэтому поток не отменяется должным образом.

Как я могу отключить предупреждения. Было бы лучше, если бы я мог подавить их только после завершения теста и завершения работы системы test kit actor.

Комментарии:

1. Я не уверен, является ли добавление akka.log-dead-letters = off решением. Документы ( doc.akka.io/japi/akka/current/akka/stream /… ) заявите, что ваш GraphStageLogic without any of the handler callbacks . Может быть, если вы найдете GraphStage в своем проекте и убедитесь, что у них есть try {} catch { case e: Throwable => failStage(e) } . Я думаю, что именно здесь возникает ваша проблема.

Ответ №1:

Эта запись в журнале взята из akka.testkit.TestEventListener (или из некоторого ее подкласса) части тестового набора Akka, она присутствует только в том случае, если вы явно включили ее через config with akka.loggers = ["akka.testkit.TestEventListener"] .

akka.log-dead-letters Настройка влияет только на обработчик dead letter по умолчанию, а не на testkit.

Если вы не используете logging testkit, вы можете просто удалить эту конфигурацию из своей конфигурации в тесте, если вы используете ее, возможно, вы можете использовать TestEvent.Mute с фильтром для этого конкретного предупреждения. Mute публикуется на шине событий и принимается TestEventListener .