Crystal 中的全局日志级别

Global log level in Crystal

我正在使用 Crystal 编程语言编写应用程序。我喜欢 Crystal 的一件事是它广泛的标准库,其中包括诸如 Logger 实用程序之类的东西。

日志语法如下所示:

require "logger"

log = Logger.new(STDOUT)
log.level = Logger::WARN

log.debug("Created logger")
log.info("Program started")
log.warn("Nothing to do!")

(Taken from Crystal documentation)

我 运行 遇到的问题是很难跟踪严重性级别。要么我必须将相同的 Logger 对象传递给任何我想要登录的 class/method,要么我必须传递严重性枚举。

我该如何处理这个问题? Crystal 社区是否有公认的解决方案?

您可以将记录器放在 class 上,例如

module MyApp
  class_getter logger = Logger.new.tap { |l| l.level = Logger::WARN }
end

然后与MyApp.logger.info("foo")一起使用。

但是这有一些缺点:

  1. 日志记录级别是全局的,您不能对其进行编辑class。
  2. 无法在图书馆内登录(他们看不到 MyApp

也许值得在 Crystal 回购上开一个问题来讨论这个问题。