当前位置:  开发笔记 > 编程语言 > 正文

scala StrictLogging和Lazylogging有什么区别?

如何解决《scalaStrictLogging和Lazylogging有什么区别?》经验,为你挑选了3个好方法。

请考虑以下使用scala日志记录的代码:

class MyClass extends LazyLogging {
  logger.debug("This is very convenient")
}

如果我使用StrictLogging有什么区别?我什么时候应该使用哪个?

编辑:我知道懒惰是什么.但是我无法从日志记录的角度来看它,与严格的日志记录相比,它与功能有何不同.这样我才能理解何时使用哪一个.



1> Cole Stanfie..:

好吧,每个人似乎已经涵盖了什么lazy方法,但没有真正提到这会如何影响你的选择,所以我会尝试列出我自己遵循的指导方针.

StrictLogging默认情况下使用pretty,特别是如果类是单例,或者您知道将始终调用日志方法.

使用LazyLogging,如果你有这种特质产生大量的对象重复.如果您正在这样做,您可能会考虑将此记录器放在类的伴随对象中,这样您就不会一直进行实例化Logger和调用LoggerFactory.getLogger(...).

谁能想到使用/不使用其他的原因LazyLoggingStrictLogging


使用像Spark这样的框架时,为编写计算而编写的代码块必须是Serializable.如果您有一个要在群集中广播的类,并且希望在该类中使用日志记录,则最好的方法是使用LazyLogging.这张jira票证(对我来说)LazzyLogging记录器是Serializable(但我还没有自己验证):https://github.com/lightbend/scala-logging/issues/26

2> Yuval Itzcha..:

我假设您正在引用typesafes scala-logging库.区别仅在于logger底层记录器定义的方式,它可以定义为正常值,也可以定义为惰性值,这意味着:

trait LazyLogging {
  @volatile protected lazy val logger: Logger =
      Logger(LoggerFactory.getLogger(getClass.getName))
}

VS

trait StrictLogging {
  protected val logger: Logger =
    Logger(LoggerFactory.getLogger(getClass.getName))
}



3> fabfas..:

scala StrictLogging和Lazylogging有什么区别?

让我们先读两个特征定义;

trait LazyLogging {
 @volatile protected lazy val logger: Logger =
 Logger(LoggerFactory.getLogger(getClass.getName))
}

trait StrictLogging {
protected val logger: Logger =
 Logger(LoggerFactory.getLogger(getClass.getName))
}

主要区别在于@volatilelazy关键字.

怎么样lazy

a的主要特征lazy val是绑定表达式不会立即计算,而是在第一次访问时计算.初始访问发生时,将计算表达式.在后续访问中,不会进行进一步评估,而是立即返回存储的结果.

对于多线程场景,@volatile将强制内存跨多个线程进入一致状态.

实际上,它取决于使用LazyLogging或使用特性的个人用例StrictLogging.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有