akka-http нет трассировки стека или сведений об ошибке

Я получил структуру, которую в основном можно резюмировать следующим образом:

  • внешний пользователь делает запрос на отдых к серверу akka-http
  • akka-http делает запрос (запрос?) к (какому) источнику данных, используя asynchttpclient
  • akka-http преобразует результат asynchttpclient и возвращает его пользователю

В какой-то момент я получаю сообщение об ошибке от akka, которое почти ничего мне не говорит. Эта ошибка возникает сразу после того, как asynchttpclient возвращает мне некоторые результаты. (На данный момент я могу напечатать результаты в журнале, они там проанализированы из json и т. д., но akka уже выдал ошибку)

Даже на уровне ведения журнала отладки я не получил расшифровываемого сообщения об ошибке от akka или трассировки стека.

единственное сообщение, которое я получил:

2017-03-24 17:22:55 INFO  CompanyRepository:111 - search company with name:"somecompanyname"
2017-03-24 17:22:55 INFO  CompanyRepository:73 - [QUERY TIME]: 527ms
[ERROR] [03/24/2017 17:22:55.951] [company-api-system-akka.actor.default-dispatcher-3] [akka.actor.ActorSystemImpl(company-api-system)] Error during processing of request: 'requirement failed'. Completing with 500 Internal Server Error response.

Это сообщение об ошибке - единственное, что я получаю. Соответствующие части моей конфигурации:

akka {
  loglevel = "DEBUG"
  # edit --  tested with sl4jlogger with no change
  #loggers = ["akka.event.slf4j.Slf4jLogger"]
  #logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"

  parsing {
    max-content-length = 800m
    max-chunk-size             = 100m
  }
  server {
    server-header = akka-http/${akka.http.version}
    idle-timeout = 120 s
    request-timeout = 120 s
    bind-timeout = 10s
    max-connections = 1024
    pipelining-limit = 32

    verbose-error-messages = on
  }

  client {
    user-agent-header = akka-http/${akka.http.version}
  }

  host-connection-pool {
    max-connections = 4
  }
}

akka.http.routing {
  verbose-error-messages = on
}

Кто-нибудь знает, могу ли я заставить akka выдать более подробную информацию о том, что/где происходит ошибка?

Изменить: Я понял, что НЕ получаю ту же ошибку в наборах результатов меньшего размера. ‹- игнорировать

Редактировать 2:

  • Добавлен akka.loglevel = DEBUG, выдает гораздо больше шума, но все еще не содержит подробностей о фактической ошибке.
  • Быстро преобразовал asynchttpclient в akka, чтобы исключить AHC
  • У меня уже была оболочка вокруг моего запроса, чтобы рассчитать время, я добавил туда журнал, пытаясь точно определить, когда именно происходит ошибка.

    def queryTimer[ R <: Future[ Any ] ]( block: => R ): R = {
      val t0 = System.currentTimeMillis()
      val result = block
      result.onComplete { maybeResult =>
        val t1 = System.currentTimeMillis()
        logger.info( "[QUERY TIME]: " + ( t1 - t0 ) + "ms" )
    
        maybeResult match {
          case Success(some) =>
            logger.info( "successful feature:")
            logger.info( FormattedString.prettyPrint(some))
          case Failure(someFailure) =>
            logger.info( "failed feature:")
            logger.debug( FormattedString.prettyPrint(someFailure))
        }
      }
      result
    }
    
  • результирующий журнал:

    2017-03-28 13:19:10 INFO  CompanyRepository:111 - search company with name:"some company"
    [DEBUG] [03/28/2017 13:19:10.497] [company-api-system-akka.actor.default-dispatcher-2] [EventStream(akka://xca-api-actor-system)] logger log1-Logging$DefaultLogger started
    [DEBUG] [03/28/2017 13:19:10.497] [company-api-system-akka.actor.default-dispatcher-2] [EventStream(akka://xca-api-actor-system)] Default Loggers started
    [DEBUG] [03/28/2017 13:19:10.613] [company-api-system-akka.actor.default-dispatcher-2] [AkkaSSLConfig(akka://xca-api-actor-system)] Initializing AkkaSSLConfig extension...
    [DEBUG] [03/28/2017 13:19:10.613] [company-api-system-akka.actor.default-dispatcher-2] [AkkaSSLConfig(akka://xca-api-actor-system)] buildHostnameVerifier: created hostname verifier: com.typesafe.sslconfig.ssl.DefaultHostnameVerifier@779e2339
    [DEBUG] [03/28/2017 13:19:10.633] [xca-api-actor-system-akka.actor.default-dispatcher-3] [akka://xca-api-actor-system/user/pool-master/PoolInterfaceActor-0] (Re-)starting host connection pool to localhost:27474
    [DEBUG] [03/28/2017 13:19:10.727] [xca-api-actor-system-akka.actor.default-dispatcher-3] [akka://xca-api-actor-system/system/IO-TCP/selectors/$a/0] Resolving localhost before connecting
    [DEBUG] [03/28/2017 13:19:10.740] [xca-api-actor-system-akka.actor.default-dispatcher-4] [akka://xca-api-actor-system/system/IO-DNS] Resolution request for localhost from Actor[akka://xca-api-actor-system/system/IO-TCP/selectors/$a/0#-815754478]
    [DEBUG] [03/28/2017 13:19:10.749] [xca-api-actor-system-akka.actor.default-dispatcher-4] [akka://xca-api-actor-system/system/IO-TCP/selectors/$a/0] Attempting connection to [localhost/127.0.0.1:27474]
    [DEBUG] [03/28/2017 13:19:10.751] [xca-api-actor-system-akka.actor.default-dispatcher-4] [akka://xca-api-actor-system/system/IO-TCP/selectors/$a/0] Connection established to [localhost:27474]
    2017-03-28 13:19:10 INFO  CompanyRepository:73 - [QUERY TIME]: 376ms
    2017-03-28 13:19:10 INFO  CompanyRepository:77 - successful feature:
    [ERROR] [03/28/2017 13:19:10.896] [company-api-system-akka.actor.default-dispatcher-7] [akka.actor.ActorSystemImpl(company-api-system)] Error during processing of request: 'requirement failed'. Completing with 500 Internal Server Error response.
    2017-03-28 13:19:10 INFO  CompanyRepository:78 - SearchResult(List(
    ( prettyprint output here!!! lots and lots of legit result, json parsed succcesfully into a bunch of case classes)
    

    как вы можете видеть, мой формат журнала и akkas отличаются, ОШИБКА исходит от akka с деталями, в то время как все выглядит как работающее.

Редактировать 3: журналы с sleep между вызовами

  • новая функция таймера запросов со сном

    def queryTimer[ R <: Future[ Any ] ]( block: => R ): R = {
      val t0 = System.currentTimeMillis()
      val result = block
      result.onComplete { maybeResult =>
        val t1 = System.currentTimeMillis()
        logger.info( "[QUERY TIME]: " + ( t1 - t0 ) + "ms" )
    
        maybeResult match {
          case Success(some) =>
            Thread.sleep(500)
            logger.info( "successful feature:")
            Thread.sleep(500)
            logger.info( FormattedString.prettyPrint(some))
            Thread.sleep(500)
            logger.info("we are there!")
          case Failure(someFailure) =>
            logger.info( "failed feature:")
            logger.debug( FormattedString.prettyPrint(someFailure))
        }
      }
      result
    }
    
  • логи со снами

    [DEBUG] [03/30/2017 11:11:58.629] [xca-api-actor-system-akka.actor.default-dispatcher-7] [akka://xca-api-actor-system/system/IO-TCP/selectors/$a/0] Attempting connection to [localhost/127.0.0.1:27474]
    [DEBUG] [03/30/2017 11:11:58.631] [xca-api-actor-system-akka.actor.default-dispatcher-7] [akka://xca-api-actor-system/system/IO-TCP/selectors/$a/0] Connection established to [localhost:27474]
    11:11:59.442 [pool-2-thread-1] DEBUG o.a.netty.channel.DefaultChannelPool - Closed 0 connections out of 0 in 0 ms
    11:11:59.496 [pool-1-thread-1] DEBUG o.a.netty.channel.DefaultChannelPool - Closed 0 connections out of 0 in 0 ms
    11:12:00.250 [ForkJoinPool-2-worker-15] INFO  c.s.s.r.neo4j.CompanyRepository - [QUERY TIME]: 1880ms
    [ERROR] [03/30/2017 11:12:00.265] [company-api-system-akka.actor.default-dispatcher-3] [akka.actor.ActorSystemImpl(company-api-system)] Error during processing of request: 'requirement failed'. Completing with 500 Internal Server Error response.
    11:12:00.543 [pool-2-thread-1] DEBUG o.a.netty.channel.DefaultChannelPool - Closed 0 connections out of 0 in 0 ms
    11:12:00.597 [pool-1-thread-1] DEBUG o.a.netty.channel.DefaultChannelPool - Closed 0 connections out of 0 in 0 ms
    11:12:00.752 [ForkJoinPool-2-worker-15] INFO  c.s.s.r.neo4j.CompanyRepository - successful feature:
    11:12:01.645 [pool-2-thread-1] DEBUG o.a.netty.channel.DefaultChannelPool - Closed 0 connections out of 0 in 0 ms
    11:12:01.697 [pool-1-thread-1] DEBUG o.a.netty.channel.DefaultChannelPool - Closed 0 connections out of 0 in 0 ms
    11:12:01.750 [ForkJoinPool-2-worker-15] INFO  c.s.s.r.neo4j.CompanyRepository - SearchResult(List( "lots of legit result here"
    11:12:02.281 [ForkJoinPool-2-worker-15] INFO  c.s.s.r.neo4j.CompanyRepository - we are there!
    

Изменить 4 и решение!

  • По-видимому, обработчик исключений по умолчанию не печатает трассировку стека! переопределение обработчика исключений с очень простым уловом:

    implicit def myExceptionHandler: ExceptionHandler =
      ExceptionHandler {
        case e: Exception => {
          logger.info("---------------- exception log start")
          logger.error(e.getMessage, e)
          logger.error("cause" , e.getCause)
          logger.error("cause" , e.getStackTraceString )
          logger.info( FormattedString.prettyPrint(e))
          logger.info("---------------- exception log end")
          Directives.complete("server made a boo boo")
          }
      }
    
  • приводит к трассировке стека, которая сбивает меня с толку!!

    11:42:04.634 [company-api-system-akka.actor.default-dispatcher-2] INFO  c.stepweb.scarifgate.CompanyApiApp$ - ---------------- exception log start
    11:42:04.640 [company-api-system-akka.actor.default-dispatcher-2] ERROR c.stepweb.scarifgate.CompanyApiApp$ - requirement failed
    java.lang.IllegalArgumentException: requirement failed
        at scala.Predef$.require(Predef.scala:212) ~[scala-library-2.11.8.jar:na]
        at spray.json.BasicFormats$StringJsonFormat$.write(BasicFormats.scala:121) ~[spray-json_2.11-1.3.2.jar:na]
        at spray.json.BasicFormats$StringJsonFormat$.write(BasicFormats.scala:119) ~[spray-json_2.11-1.3.2.jar:na]
        at spray.json.ProductFormats$class.productElement2Field(ProductFormats.scala:46) ~[spray-json_2.11-1.3.2.jar:na]
        at com.stepweb.scarifgate.services.CompanyService.productElement2Field(CompanyService.scala:14) ~[classes/:na]
        at spray.json.ProductFormatsInstances$$anon$3.write(ProductFormatsInstances.scala:73) ~[spray-json_2.11-1.3.2.jar:na]
        at spray.json.ProductFormatsInstances$$anon$3.write(ProductFormatsInstances.scala:68) ~[spray-json_2.11-1.3.2.jar:na]
        at spray.json.PimpedAny.toJson(package.scala:39) ~[spray-json_2.11-1.3.2.jar:na]
        at spray.json.CollectionFormats$$anon$1$$anonfun$write$1.apply(CollectionFormats.scala:26) ~[spray-json_2.11-1.3.2.jar:na]
        at spray.json.CollectionFormats$$anon$1$$anonfun$write$1.apply(CollectionFormats.scala:26) ~[spray-json_2.11-1.3.2.jar:na]
        at scala.collection.immutable.List.map(List.scala:273) ~[scala-library-2.11.8.jar:na]
        at spray.json.CollectionFormats$$anon$1.write(CollectionFormats.scala:26) ~[spray-json_2.11-1.3.2.jar:na]
        at spray.json.CollectionFormats$$anon$1.write(CollectionFormats.scala:25) ~[spray-json_2.11-1.3.2.jar:na]
        at spray.json.ProductFormats$class.productElement2Field(ProductFormats.scala:46) ~[spray-json_2.11-1.3.2.jar:na]
        at com.stepweb.scarifgate.services.CompanyService.productElement2Field(CompanyService.scala:14) ~[classes/:na]
        at spray.json.ProductFormatsInstances$$anon$1.write(ProductFormatsInstances.scala:30) ~[spray-json_2.11-1.3.2.jar:na]
        at spray.json.ProductFormatsInstances$$anon$1.write(ProductFormatsInstances.scala:26) ~[spray-json_2.11-1.3.2.jar:na]
        at akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport$$anonfun$sprayJsonMarshaller$1.apply(SprayJsonSupport.scala:62) ~[akka-http-spray-json_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport$$anonfun$sprayJsonMarshaller$1.apply(SprayJsonSupport.scala:62) ~[akka-http-spray-json_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshalling.Marshaller$$anonfun$compose$1$$anonfun$apply$15.apply(Marshaller.scala:73) ~[akka-http_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshalling.Marshaller$$anonfun$compose$1$$anonfun$apply$15.apply(Marshaller.scala:73) ~[akka-http_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshalling.Marshaller$$anon$1.apply(Marshaller.scala:92) ~[akka-http_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshalling.GenericMarshallers$$anonfun$optionMarshaller$1$$anonfun$apply$1.apply(GenericMarshallers.scala:19) ~[akka-http_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshalling.GenericMarshallers$$anonfun$optionMarshaller$1$$anonfun$apply$1.apply(GenericMarshallers.scala:18) ~[akka-http_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshalling.Marshaller$$anon$1.apply(Marshaller.scala:92) ~[akka-http_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshalling.PredefinedToResponseMarshallers$$anonfun$fromStatusCodeAndHeadersAndValue$1$$anonfun$apply$5.apply(PredefinedToResponseMarshallers.scala:58) ~[akka-http_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshalling.PredefinedToResponseMarshallers$$anonfun$fromStatusCodeAndHeadersAndValue$1$$anonfun$apply$5.apply(PredefinedToResponseMarshallers.scala:57) ~[akka-http_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshalling.Marshaller$$anon$1.apply(Marshaller.scala:92) ~[akka-http_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshalling.Marshaller$$anonfun$compose$1$$anonfun$apply$15.apply(Marshaller.scala:73) ~[akka-http_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshalling.Marshaller$$anonfun$compose$1$$anonfun$apply$15.apply(Marshaller.scala:73) ~[akka-http_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshalling.Marshaller$$anon$1.apply(Marshaller.scala:92) ~[akka-http_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshalling.ToResponseMarshallable$$anonfun$1$$anonfun$apply$1.apply(ToResponseMarshallable.scala:29) ~[akka-http_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshalling.ToResponseMarshallable$$anonfun$1$$anonfun$apply$1.apply(ToResponseMarshallable.scala:29) ~[akka-http_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshalling.Marshaller$$anon$1.apply(Marshaller.scala:92) ~[akka-http_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshalling.GenericMarshallers$$anonfun$futureMarshaller$1$$anonfun$apply$3$$anonfun$apply$4.apply(GenericMarshallers.scala:33) ~[akka-http_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.marshalling.GenericMarshallers$$anonfun$futureMarshaller$1$$anonfun$apply$3$$anonfun$apply$4.apply(GenericMarshallers.scala:33) ~[akka-http_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.util.FastFuture$.akka$http$scaladsl$util$FastFuture$$strictTransform$1(FastFuture.scala:41) ~[akka-http-core_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.util.FastFuture$$anonfun$transformWith$extension1$1.apply(FastFuture.scala:51) [akka-http-core_2.11-10.0.0.jar:10.0.0]
        at akka.http.scaladsl.util.FastFuture$$anonfun$transformWith$extension1$1.apply(FastFuture.scala:50) [akka-http-core_2.11-10.0.0.jar:10.0.0]
        at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) [scala-library-2.11.8.jar:na]
        at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55) [akka-actor_2.11-2.4.16.jar:na]
        at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply$mcV$sp(BatchingExecutor.scala:91) [akka-actor_2.11-2.4.16.jar:na]
        at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91) [akka-actor_2.11-2.4.16.jar:na]
        at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91) [akka-actor_2.11-2.4.16.jar:na]
        at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:72) [scala-library-2.11.8.jar:na]
        at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:90) [akka-actor_2.11-2.4.16.jar:na]
        at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39) [akka-actor_2.11-2.4.16.jar:na]
        at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:415) [akka-actor_2.11-2.4.16.jar:na]
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [scala-library-2.11.8.jar:na]
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [scala-library-2.11.8.jar:na]
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [scala-library-2.11.8.jar:na]
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [scala-library-2.11.8.jar:na]
    11:42:04.640 [company-api-system-akka.actor.default-dispatcher-2] ERROR c.stepweb.scarifgate.CompanyApiApp$ - cause
    11:42:04.641 [company-api-system-akka.actor.default-dispatcher-2] ERROR c.stepweb.scarifgate.CompanyApiApp$ - cause
    11:42:04.644 [company-api-system-akka.actor.default-dispatcher-2] INFO  c.stepweb.scarifgate.CompanyApiApp$ - java.lang.IllegalArgumentException: requirement failed
    11:42:04.644 [company-api-system-akka.actor.default-dispatcher-2] INFO  c.stepweb.scarifgate.CompanyApiApp$ - ---------------- exception log end 
    
  • Итак... исключение вызывается здесь в spray.json.BasicFormats

    implicit object StringJsonFormat extends JsonFormat[String] {
      def write(x: String) = {
        require(x ne null)    // <-----------------------------------
        JsString(x)
      }
      def read(value: JsValue) = value match {
        case JsString(x) => x
        case x => deserializationError("Expected String as JsString, but got " + x)
      }
    }
    

что означает, что одна из строк в этих тысячах строк ответа равна нулю. Особая благодарность за лень использовать это «require» без сообщения. Отладка того, какая строка пуста, будет кошмаром, но я все еще думаю, что akka должна потерпеть неудачу лучше.


person kali    schedule 24.03.2017    source источник
comment
Вы пытались установить akka.loglevel на DEBUG?   -  person Cyrille Corpet    schedule 24.03.2017
comment
уровень журнала в моем файле log4j.properties - отладка, akka.loglevel что-нибудь добавить? и где это должно быть установлено?   -  person kali    schedule 24.03.2017
comment
это должно быть в вашей конфигурации (вы можете добавить ключ loglevel к существующему объекту akka) и до того, как log4j сможет что-либо сделать.   -  person Cyrille Corpet    schedule 24.03.2017
comment
Как выглядит ваш код, который делает вызов AsyncHttpClient? Вы используете Будущее? Если это так, вам, вероятно, придется явно перехватывать ошибки и регистрировать ошибки, иначе они будут проглочены.   -  person simonl    schedule 24.03.2017
comment
AsyncHttpClient использует фьючерсы и читает из потока. Я не думаю, что проблема в AHC, потому что через несколько мгновений после того, как akka выдает эти журналы ошибок, выдаются данные, возвращаемые из вызова AHC. Я думаю, что упомянул об этом в своем вопросе, но, возможно, это неясно.   -  person kali    schedule 25.03.2017
comment
Кали, эта проблема воспроизводится на 100% или она мерцает? Если это воспроизводимо, не могли бы вы сделать еще один тест? Что произойдет, если вы добавите Thread.sleep примерно на 1 секунду 3 раза перед первым logger.info между ними и после второго. Вопрос в том, изменит ли это порядок сообщений журнала, реабилитирующих ваш код, или ошибка по-прежнему будет каким-то образом находиться между вашими журналами?   -  person SergGr    schedule 30.03.2017
comment
Еще одна вещь, вы пытались предоставить собственный обработчик исключений? Сообщение журнала создается обработчик исключений по умолчанию, но вы также можете изменить его для регистрации трассировки стека. Кстати, это звучит немного удивительно, что я не могу найти в исходниках строковые требования, кроме тестов.   -  person SergGr    schedule 30.03.2017
comment
@SergGr написание обработчика исключений помогло распечатать трассировку стека. Если вы можете написать ответ для справки, я приму его. Я все еще верю, что akka должна потерпеть неудачу лучше, чем это, но эй..   -  person kali    schedule 30.03.2017
comment
@SergGr Сообщение о сбое требования, по-видимому, исходит от функции scala require () spray.json использует эту функцию без резервных сообщений об ошибках, следовательно, бессмысленное сообщение об ошибке :)   -  person kali    schedule 30.03.2017
comment
kali, не уверен, что именно вы хотели, чтобы я опубликовал, но я создал ответ. Не стесняйтесь редактировать (я приму любые разумные правки)   -  person SergGr    schedule 31.03.2017


Ответы (2)


akka-http нет трассировки стека или сведений об ошибке

Ну, по умолчанию akka-http ExceptionHandler не выводит трассировку стека и выводит только сообщение об ошибке или имя своего класса, если сообщение пустое, но вы можете предоставить собственный обработчик исключений, который будет печатать все, что вы хотите (т.е. стек трассировка в вашем примере).

Некоторые примеры создания собственного обработчика исключений приведены по адресу GitHub ExceptionHandlerExamplesSpec.spec

Самый простой способ в вашем случае - определить свой собственный неявный обработчик исключений.

  import akka.http.scaladsl.model._
  import akka.http.scaladsl.server._
  import StatusCodes._
  import Directives._

  implicit def myExceptionHandler: ExceptionHandler =
    ExceptionHandler {
      case NonFatal(e) =>
          logger.error(s"Exception $e at\n${e.getStackTraceString}")
          complete(HttpResponse(InternalServerError, entity = "Internal Server Error"))
        }
    }
person SergGr    schedule 30.03.2017
comment
В конце есть дополнительная закрывающая фигурная скобка, но я не могу ее удалить из-за минимального редактирования символов SO 6 - person Mark Tickner; 18.12.2019

Попробуйте также настроить регистраторы - судя по вашей конфигурации, они не установлены. Что-то типа:

akka {
  loggers = ["akka.event.slf4j.Slf4jLogger"]
  loglevel = "DEBUG"
  logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
}

Кроме того, рассмотрите возможность использования akka-slf4j вместе с их рекомендуемый сервер ведения журнала logback.

Это должно заставить akka выплевывать больше деталей.

person Andrei T.    schedule 28.03.2017
comment
Я не вижу, как другой регистратор поможет, но все равно сделал это. Это только изменило формат записанной строки ошибки, но ни слова больше информации. 10:45:10.354 [company-api-system-akka.actor.default-dispatcher-3] ERROR akka.actor.ActorSystemImpl - Error during processing of request: 'requirement failed'. Completing with 500 Internal Server Error response. - person kali; 29.03.2017