2013-09-21 2 views
7

Cette question est vraiment stupide, mais comment pouvez-vous faire une mise en forme pratique des chaînes de journaux dans Play Framework 2 (et dans Scala?).Syntaxe de journalisation pour Play Framework 2 dans Scala

J'ai googlé mais c'est très difficile de trouver un exemple, essentiellement la plupart des liens parlent de la configuration de Logback en premier lieu que j'ai bien fait.

Je suis fondamentalement en essayant de trouver la meilleure façon stylistique de faire quelque chose comme:

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

Venant d'un je suppose que vous pourriez faire quelque chose comme arrière-plan C# (et log4net):

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

Mais je ne vois pas comment cela fonctionnerait avec le trait tel qu'il est défini. J'ai aussi vu de vagues références à la façon dont vous pourriez être en mesure d'éviter la vérification Logger.isDebugEnabled en utilisant une syntaxe évaluative paresseux comme:

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

qui utilise le macros Scala - mais encore une fois, cela ne fonctionne pas et je peux trouver très peu d'informations à ce sujet. Est-ce que je manque quelque chose de vraiment flagrant ici?

Répondre

9
  1. Le cadre utilisé pour l'exploitation forestière est logback. Lorsque vous tapez: Logger.debug, le isDebugEnabled est déjà implicitement vérifié.

  2. Pour la syntaxe de journalisation, utilisez l'interpolation de chaîne Scala.

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

Tout ce que je cherche merci - Je suis encore un noob Scala et n'ont pas eu à s-cordes encore! –

1

Pourquoi ne pas simplement utiliser les capacités d'interpolation String standard de la langue/stdlib? Je m'excuse si j'ai manqué quelque chose de crucial à propos de votre question.

Pour ce qui est d'éviter le contrôle if (Logger.isDebugEnabled), si le cadre de l'exploitation forestière ne fournit pas une sorte de système d'évaluation paresseuse pour les arguments passés dans, je voudrais juste d'abord envisager de définir mes propres emballages:

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

Aussi, je ne pensez pas que la façon dont vous interpolez les choses dans la chaîne n'a rien à voir avec l'évaluation des arguments à debug() si la journalisation est désactivée - si debug() déclare qu'elle souhaite évaluer les arguments passés, il n'y a aucun moyen de le faire voyez que vous pouvez passer à l'évaluation paresseuse sur le site d'appel en utilisant simplement un "formulaire spécial" d'interpolation de chaîne. (Je serais heureux si quelqu'un me prouvait une erreur ici et m'a appris quelque chose de nouveau :))

Divulgation: Je ne suis pas familier avec Play (encore), donc je suis juste en train de tenter une approche générale ici .

Questions connexes