Как да накарам Play да отпечата всички грешки

В нашите Scala, Play, Reactivemongo имаме голям проблем с обработката на изключения - когато има грешка, в Iteratee/Enumeratee или в системата Actor, Play просто я поглъща, без да записва грешка в изхода. Така че всъщност трябва да познаем къде и защо може да се случи тази грешка.

Направихме Globals override, винаги да отпечатва грешката, и посочихме logger.root=TRACE, но все още не видяхме изход, от който да анализираме нашите проблеми.

Как принудително да накарате Play да отпечата всички грешки


person mavarazy    schedule 01.05.2014    source източник


Отговори (3)


Не намерих начин за изрично регистриране на всичко, но има начин за локално регистриране на изключения.

Направих го:

def recover[T] = Enumeratee.recover[T] {
  case (e, input) => Logger.error("Error happened on:" + input, e)
}

и след това го използва за всички изброени, които могат да доведат до грешки

def transform(from: Enumerator[From]): Enumerator[String] = {
  heading >>> (from &> recover[From] ><> mapper) >>> tailing
}

тук картографът хвърля изключение и всички те се регистрират.

person Dmitriy Pogretskiy    schedule 04.08.2014

Мисля, че вашият проблем е с това как Future работи в scala, нека вземем следния пример:

val f :Future[Int]= Future {
     throw new NullPointerException("NULL")
     1
}
f.map(s1 => {println(s" ==>  $s1");s" ==>  $s1"})

Този код ще хвърли изключение, но проследяването на стека няма да бъде отпечатано, тъй като фючърсите обработват грешката.

Ако искате да получите грешката, която се е случила, можете просто да се обадите:

f.onComplete{
    case Success(e) => {}
    case Failure(e) => e.printStackTrace()
}

e е средство за хвърляне, което можете да използвате, както искате, за справяне с грешката.

person faissalb    schedule 08.08.2014

В решението, което използвах, е отмяна чрез ErrorHandling в Play https://www.playframework.com/documentation/2.4.2/ScalaErrorHandling, основно създаване на ErrorHandler, който регистрира всички грешки, с необходимата детайлизация.

person mavarazy    schedule 11.08.2015