2013-11-25 5 views
0

Global.scala в новом приложении PLAY2:Akka Scheduler сбрасывает уровни регистрации. Зачем?

import play.api.{GlobalSettings, Application} 
import play.api.libs.concurrent.Akka 
import play.api.libs.concurrent.Execution.Implicits._ 
import play.api.Play 
import play.api.Play.current 
import scala.concurrent._ 
import scala.concurrent.duration._ 
import play.api.Logger 

object Global extends GlobalSettings { 
    val logger = Logger("foo") 

    // `printLoggerLevels` prints logger levels 
    def printLoggerLevels(prepend:String) = 
    logger.error(
     prepend +": "+ 
     logger.isErrorEnabled +" "+ 
     logger.isWarnEnabled +" "+ 
     logger.isInfoEnabled +" "+ 
     logger.isDebugEnabled +" "+ 
     logger.isTraceEnabled 
    ) 

    override def onStart(app: Application) { 
    printLoggerLevels("outside scheduleOnce") 
    Akka.system.scheduler.scheduleOnce(500 milliseconds) { 
     printLoggerLevels("inside scheduleOnce") 
    } 
    } 
} 

Это печатает уровни регистратора вне и внутри Akka.system.scheduler.scheduleOnce(500 milliseconds) {...} так:

$ play start 9000 
[error] foo - outside scheduleOnce: true true true true false <----- notice this 
[info] play - Starting application default Akka system. 
[info] a.e.s.Slf4jEventHandler - Slf4jEventHandler started 
[info] play - Application started (Prod) 
[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000 
[error] foo - inside scheduleOnce: true false false false false <----- and this 

Вы можете видеть, что уровни ЗК внутри scheduleOnce сбрасываются в ОШИБКА. Вне scheduleOnce они находятся на DEBUG, и внутри они находятся на ОШИБКЕ. Если бы я должен был запустить его с play run, он будет работать нормально, а уровни будут одинаковыми, но при запуске с play start они будут сброшены.

Application.conf:

logger.root=DEBUG 
logger.play=INFO 
logger.application=INFO 

Это свежий проект, я не сделал никаких изменений я не Столба.

Почему это происходит?

Редактировать: Еще один способ задать этот вопрос: как работает приложение с start влияет на его внутреннюю работу, и в свою очередь, как это влияет на уровни ведения журнала в анонимной функции, переданные планировщику Akka?

Edit: Play версия 2.1.4

+0

Не могли бы вы уточнить версию? Это Play 2.0.0? Были некоторые довольно большие изменения между версиями v2 с точки зрения построения проектов и т. Д. ... – torbinsky

+0

@torbinsky моя точная версия игры 2.1.4 –

ответ

1

Это немного беспорядок, если честно. Он улучшился в Play 2.2.x, но он все еще запутан.

Большая разница между запуском и запуском здесь заключается в том, что при запуске сервер Netty запускается до того, как приложение загрузится (поскольку оно не загружает приложение до тех пор, пока вы не нажмете на сетевой сервер, поскольку он является динамическим). При запуске сетевой сервер запускается после загрузки приложения, поскольку вы не хотите запускать запросы на обслуживание до тех пор, пока не получите приложение, которое может их обслуживать. Это когда запущен сетевой сервер, который настроен на регистратор.

Смежные вопросы