Crystal中的全局日志级别

问题描述:

我正在用Crystal编程语言编写应用程序。我喜欢Crystal的其中一件事是其广泛的标准库,其中包括诸如Logger实用程序之类的内容。Crystal中的全局日志级别

日志记录语法如下:

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社区中是否有可接受的解决方案?

你可以把记录器上的一类,例如

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

然后用MyApp.logger.info("foo")使用它。

但是,这有一些缺点:

  1. 日志记录级别是全球性的,你不能按类进行编辑。图书馆内
  2. 记录是不可能的(他们不能看到MyApp

也许这将是值得的水晶回购开放的问题进行讨论。