2013-09-21 15 views
7

これは本当にばかげた質問ですが、Play Framework 2(およびScala?)ではどのように便利なログ文字列の書式設定を行うことができますか?ScalaのPlay Framework 2のログ構文

私はグーグルではありますが、例を見つけるのは非常に困難です。本質的にほとんどのリンクは、私がうまくやった最初のLogbackの設定です。

私は基本的に何か行うための最善の文体の方法を見つけるためにしようとしている:私はあなたができると仮定したいC#の背景(とlog4netの)から来る

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

を何かのように:

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

しかし、私はそれがどのように定義されているように形質と共に機能するのか分かりません。私はまた、あなたのような怠惰な評価的構文を使用してLogger.isDebugEnabledをチェック避けることができるかもしれませんどのようにあいまいな参照を見てきました:

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

Scalaのマクロを使用しています - しかし、再び、非常にそれが動作しないと私は見つけることができますそれについての情報はほとんどありません。

ここには本当に露骨なものがありますか?

答えて

9
  1. ロギングに使用されるフレームワークはログバックです。入力するとき:Logger.debugisDebugEnabledは既に暗黙的にチェックされます。

  2. ロギングの構文については、Scala文字列補間を使用してください。

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

ただ、私が感謝を探しています - 私はまだScalaのnoobのだと、まだS-文字列にもらっていません! –

1

なぜ言語/ stdlibの標準的な文字列補間機能を使用しないのですか? http://docs.scala-lang.org/overviews/core/string-interpolation.html

私はあなたの質問について重大なことを忘れてしまった場合はお詫び申し上げます。ロギングフレームワークは、それに渡される引数の遅延評価制度のいくつかの並べ替えを提供していない場合if (Logger.isDebugEnabled)チェックを回避するとして、私はちょうど最初に私自身のラッパーを定義する検討する

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

また、私はあなたが文字列に要素を補間する方法は、ログが無効な場合にはdebug()への引数を評価しないことと関係があるとは思わない - debug()がそれに渡された引数をeager-evaluatesと宣言すれば、文字列補間の「特別な形式」を使用するだけで、コールサイトで遅延評価に変更することができます。 (私がここで間違っていると誰かが私に何か新しいことを教えてくれたら嬉しいです:))

ディスクロージャー:私はプレイにはまだ慣れていないので、ここでは一般的なアプローチ。

関連する問題