我来自 Java 世界,在 Java 中,我们过去常常在使用调试级别进行日志记录之前测试是否启用了调试。像这样:
if(logger.isDebugEnabled)
logger.debug("Debug")
这是为了避免评估传递给 logger.debug
的参数。我们是否必须对 scala LazyLogging
特性做同样的事情?
class Test extends LazyLogging{
val veryBigSeq: Seq[String] = //...
logger.debug(veryBigSeq.toString()) //<<----- Here
}
最佳答案
如你所见,代码
if(logger.isDebugEnabled)
logger.debug("Debug")
非常重复,并且可以很容易地从作为参数传递给 logger.debug(...)
的 AST 部分自动生成。如果这不是作为宏实现的,那将是令人惊讶的。事实上,如果您看一下 Logger.scala 中的实际代码,然后你会看到所有那些 .debug
和 .error
方法实际上都是宏。因此,将自动添加所有样板文件,不需要每个 .debug
周围的 if
。
关于scala - LazyLogging 是否启用调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50350262/