登录 Scala
登录 Scala
在Scala应用程序中记录日志的好方法是什么?需要与语言哲学一致,不会使代码混乱,并且易于维护和不引人注目。以下是基本要求清单:
- 简单
- 不会使代码混乱。Scala的简洁性很棒。我不想让我的代码有一半是日志记录语句
- 日志记录格式可以更改以适合我的企业日志和监控软件
- 支持日志记录级别(即调试,跟踪,错误)
- 可以记录到磁盘以及其他目的地(即套接字,控制台等)
- 最少的配置(如果有的话)
- 可以在容器中工作(即Web服务器)
- (可选但很好)作为语言的一部分或作为maven工件提供,因此无需修改我的构建即可使用它
我知道可以使用现有的Java日志记录解决方案,但它们至少在混乱和配置两个方面失败。
感谢您的回复。
使用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 ;-)") }
slf4j包装器
大多数Scala的日志库都是在Java日志框架(slf4j,log4j等)的包装器上进行了一些包装,但截至2015年3月,所有存活的日志库都是slf4j。这些日志库提供了某种类型的log
对象,您可以调用info(...)
,debug(...)
等方法。我不是slf4j的大粉丝,但它现在似乎是主要的日志框架。这里是SLF4J的描述:
简单日志门面(SLF4J)用作各种日志框架(例如java.util.logging、log4j和logback)的简单门面或抽象,允许最终用户在部署时插入所需的日志框架。
在部署时更改基础日志库的能力为整个slf4j日志记录器系列带来了独特的特性,您需要注意:
- 类路径作为配置方法。slf4j知道您使用的基础日志记录库的方法是通过加载某个名称的类。当类加载器被定制化时,我遇到了一些问题,slf4j无法识别我的日志记录器。
- 因为简单门面试图成为通用的共同点,它仅限于实际的日志调用。换句话说,配置不能通过代码完成。
在大型项目中,如果每个人都使用slf4j,则能够方便地控制传递依赖项的日志记录行为。
Scala Logging
Scala Logging由Heiko Seeberger编写,作为他的slf4s的继任者。它使用宏将调用扩展为if
表达式,以避免可能昂贵的日志调用。
Scala Logging 是一个方便且高效的日志库,它封装了像 SLF4J 这样的日志库,也有可能封装其他的日志库。