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")
一起使用。
但是这有一些缺点:
- 日志记录级别是全局的,您不能对其进行编辑class。
- 无法在图书馆内登录(他们看不到
MyApp
)
也许值得在 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")
一起使用。
但是这有一些缺点:
- 日志记录级别是全局的,您不能对其进行编辑class。
- 无法在图书馆内登录(他们看不到
MyApp
)
也许值得在 Crystal 回购上开一个问题来讨论这个问题。