2013-09-21 12 views
7

To naprawdę głupie pytanie, ale jak można wygodnie formatować ciągi dziennika w Play Framework 2 (i Scala?).Składnia rejestrowania dla Play Framework 2 w Scali

Mam google, ale bardzo trudno jest znaleźć przykład, zasadniczo większość linków mówi o skonfigurowaniu Logback w pierwszej kolejności, co zrobiłem dobrze.

jestem zasadniczo próbuje znaleźć najlepszy sposób stylistyczną zrobić coś takiego:

if(Logger.isDebugEnabled) 
    Logger.debug("Modified: Id = '" + real_session_id + "', Modified = " + modified.toString) 

pochodzących z tła C# (i log4net) bym przypuszczać można zrobić coś takiego:

if(Logger.isDebugEnabled) 
    Logger.debug("Modified: Id = '{0}', Modified = {1}", real_session_id, modified.toString) 

Ale nie widzę, jak to działałoby z cechą w taki sposób, w jaki jest zdefiniowane. Ja również widziałem niejasnych odniesień do jak może być w stanie uniknąć sprawdzania Logger.isDebugEnabled za pomocą lazy składni evaluative jak:

Logger.debug("Modified: Id = ${real_session_id}, Modified = ${modified.toString}") 

który używa makr Scala - ale znowu, że nie działa i mogę znaleźć bardzo niewiele informacji na ten temat.

Czy brakuje mi tu czegoś naprawdę rażącego?

Odpowiedz

9
  1. Ramy używane do rejestrowania to logback. Po wpisaniu: Logger.debug, isDebugEnabled jest już domyślnie zaznaczone.

  2. Aby uzyskać składnię logowania, użyj interpolacji ciągów Scala.

    Logger.debug(s"Modified: Id = '$real_session_id', Modified = $modified.toString") 
    
+0

Tylko co szukam dzięki - Nadal jestem noobem Scala i nie dostał do S-strun jeszcze! –

1

Dlaczego po prostu nie użyć standardowych funkcji interpolacji String języka/stdlib? http://docs.scala-lang.org/overviews/core/string-interpolation.html

Przepraszam, jeśli przegapiłem coś istotnego w Twoim pytaniu.

chodzi o unikanie czek if (Logger.isDebugEnabled), jeżeli ramy rejestrowania nie zapewnia pewnego rodzaju systemu oceny leniwy do argumentów przekazanych do niego, chciałbym po prostu najpierw rozważyć definiowania własnych owijarki:

object MyLazyLogger { 
    def debug(msg: => Any) = 
    if (Logger.isDebugEnabled) Logger.debug(msg) 
} 

Również ja nie sądzę, że sposób, w jaki interpolujesz rzeczy do łańcucha, ma cokolwiek wspólnego z nierozpoznawaniem argumentów do debug(), jeśli logowanie jest wyłączone - jeśli debug() deklaruje, że chętnie ocenia wszystkie argumenty przekazane do niego, nie ma możliwości, żebym mógł zobacz, że możesz zmienić leniwą ocenę w witrynie połączenia, używając tylko "specjalnego formularza" interpolacji napisów. (Byłbym szczęśliwy, gdyby ktoś mnie tu udowodnił i nauczył mnie czegoś nowego :))

Ujawnienie: Nie znam gry (jeszcze), więc robię ujęcie ogólne podejście tutaj .