登录 Scala

11 浏览
0 Comments

登录 Scala

在Scala应用程序中记录日志的好方法是什么?需要与语言哲学一致,不会使代码混乱,并且易于维护和不引人注目。以下是基本要求清单:

  • 简单
  • 不会使代码混乱。Scala的简洁性很棒。我不想让我的代码有一半是日志记录语句
  • 日志记录格式可以更改以适合我的企业日志和监控软件
  • 支持日志记录级别(即调试,跟踪,错误)
  • 可以记录到磁盘以及其他目的地(即套接字,控制台等)
  • 最少的配置(如果有的话)
  • 可以在容器中工作(即Web服务器)
  • (可选但很好)作为语言的一部分或作为maven工件提供,因此无需修改我的构建即可使用它

我知道可以使用现有的Java日志记录解决方案,但它们至少在混乱和配置两个方面失败。

感谢您的回复。

admin 更改状态以发布 2023年5月21日
0
0 Comments

使用Scala 2.10+时考虑使用Typesafe的ScalaLogging。它使用宏来提供非常干净的API。

https://github.com/typesafehub/scala-logging

引用自他们的维基页面:

很幸运,Scala宏可以用来让我们的生活更容易:ScalaLogging提供了带有轻量级日志记录方法的Logger类,这些方法将被扩展到上述语法。因此,我们只需要编写:

logger.debug(s"Some ${expensiveExpression} message!")

应用宏之后,代码将被转换为上述描述的语法。

此外,ScalaLogging 提供了 Logging 特质,它方便地提供了初始化为混入到该特质的类名的 Logger 实例:

import com.typesafe.scalalogging.slf4j.LazyLogging
class MyClass extends LazyLogging {
  logger.debug("This is very convenient ;-)")
}

0
0 Comments

slf4j包装器

大多数Scala的日志库都是在Java日志框架(slf4j,log4j等)的包装器上进行了一些包装,但截至2015年3月,所有存活的日志库都是slf4j。这些日志库提供了某种类型的log对象,您可以调用info(...)debug(...)等方法。我不是slf4j的大粉丝,但它现在似乎是主要的日志框架。这里是SLF4J的描述:

简单日志门面(SLF4J)用作各种日志框架(例如java.util.logging、log4j和logback)的简单门面或抽象,允许最终用户在部署时插入所需的日志框架。

在部署时更改基础日志库的能力为整个slf4j日志记录器系列带来了独特的特性,您需要注意:

  1. 类路径作为配置方法。slf4j知道您使用的基础日志记录库的方法是通过加载某个名称的类。当类加载器被定制化时,我遇到了一些问题,slf4j无法识别我的日志记录器。
  2. 因为简单门面试图成为通用的共同点,它仅限于实际的日志调用。换句话说,配置不能通过代码完成。

在大型项目中,如果每个人都使用slf4j,则能够方便地控制传递依赖项的日志记录行为。

Scala Logging

Scala Logging由Heiko Seeberger编写,作为他的slf4s的继任者。它使用宏将调用扩展为if表达式,以避免可能昂贵的日志调用。

Scala Logging 是一个方便且高效的日志库,它封装了像 SLF4J 这样的日志库,也有可能封装其他的日志库。

历史日志库

  • Logula,一个由 Coda Hale 编写的 Log4J 封装。曾经很喜欢这个,但现在已经被放弃。
  • configgy,一个 java.util.logging 封装,在 Scala 较早期非常流行。现在已被放弃。
0