2013-09-21 4 views
7

Questa è una domanda davvero sciocca, ma come si può fare una comoda formattazione delle stringhe di registro in Play Framework 2 (e in Scala?).Sintassi di registrazione per Play Framework 2 in Scala

Ho cercato su Google ma è molto difficile trovare un esempio, in sostanza la maggior parte dei link sta parlando della configurazione di Logback, in primo luogo, che ho fatto bene.

praticamente sto cercando di trovare il modo migliore stilistica per fare qualcosa di simile:

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

Provenendo da un background C# (e log4net) Mi piacerebbe pensare che si possa fare qualcosa di simile:

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

Ma non riesco a vedere come ciò funzionerebbe con il tratto nel modo in cui è definito. Ho visto anche vaghi riferimenti a come si potrebbe essere in grado di evitare il controllo Logger.isDebugEnabled utilizzando una sintassi valutativa pigri come:

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

che utilizza le macro Scala - ma ancora una volta, che non funziona e riesco a trovare molto poche informazioni a riguardo.

Mi manca qualcosa di veramente sfacciato qui?

risposta

9
  1. Il framework utilizzato per la registrazione è il logback. Quando si digita: Logger.debug, lo isDebugEnabled è già controllato in modo implicito.

  2. Per la sintassi della registrazione, utilizzare l'interpolazione della stringa Scala.

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

Proprio quello che sto cercando, grazie - Sono ancora un noob Scala e non sono riuscito a S-stringhe ancora! –

1

Perché non utilizzare solo le funzionalità di interpolazione String standard della lingua/stdlib? http://docs.scala-lang.org/overviews/core/string-interpolation.html

Mi scuso se ho perso qualcosa di cruciale per la sua domanda.

Come per evitare il controllo if (Logger.isDebugEnabled), se il quadro di registrazione non fornisce una sorta di schema di valutazione pigra per argomenti passati in esso, vorrei solo prima prendere in considerazione la definizione miei wrapper:

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

Inoltre, ho non pensare che il modo in cui si interpola roba nella stringa abbia nulla a che fare con la valutazione degli argomenti su debug() se la registrazione è disabilitata-se debug() dichiara che è entusiasta-valuta qualsiasi argomento passato in esso, non c'è modo che io possa vedi puoi passare alla valutazione pigra sul sito di chiamata usando semplicemente un "modulo speciale" di interpolazione delle stringhe. (Sarei felice se qualcuno mi dimostrasse che avevo torto qui e mi ha insegnato qualcosa di nuovo :))

Disclosure: Non ho familiarità con Play (ancora), quindi sto solo facendo un tentativo con un approccio generale qui .