这是一个非常愚蠢的问题,但是如何在Play Framework 2(以及Scala?)中方便地格式化日志字符串。
我用谷歌搜索但很难找到一个例子,基本上大多数链接都是在谈论配置Logback,我做得很好。
我基本上试图找到最好的风格方式来做类似的事情:
if(Logger.isDebugEnabled)
Logger.debug("Modified: Id = '" + real_session_id + "', Modified = " + modified.toString)
来自C#背景(和log4net)我假设你可以这样做:
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宏 - 但是再次,这不起作用,我可以找到很少的信息。
我错过了一些真正明目张胆的东西吗?
答案 0 :(得分:9)
用于记录的框架是logback。键入:Logger.debug
时,已隐式检查isDebugEnabled
。
对于日志记录的语法,请使用Scala字符串插值。
Logger.debug(s"Modified: Id = '$real_session_id', Modified = $modified.toString")
答案 1 :(得分: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()
声明它渴望 - 评估传递给它的任何参数,我无法通过使用字符串插值的“特殊形式”来看到您可以在调用站点更改为延迟评估。 (如果有人在这里证明我错了并教给我一些新东西,我会很高兴的。))
披露:我不熟悉Play(还),所以我只是在这里采取一般方法。