Crystal中的全局日志级别

时间:2017-04-24 23:50:31

标签: logging crystal-lang

我正在使用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对象传递给我想要登录的任何类/方法,要么我必须传递严重性枚举。

我该如何处理这个问题? Crystal社区中是否有可接受的解决方案?

1 个答案:

答案 0 :(得分:3)

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

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

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

然而,这有一些缺点:

  1. 日志记录级别是全局的,您无法按类编辑。
  2. 无法在图书馆内登录(他们无法查看MyApp
  3. 也许值得在Crystal回购中讨论这个问题。