logging - Crystal 中的全局日志级别

标签 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 社区有公认的解决方案吗?

最佳答案

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

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

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

但是这有一些缺点:

  1. 日志记录级别是全局的,您无法按类对其进行编辑。
  2. 无法登录库(他们看不到 MyApp)

也许值得在 Crystal 存储库上开一个问题来讨论这个问题。

关于logging - Crystal 中的全局日志级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43599378/

相关文章:

logging - 如何控制 podman 容器日志行为 (ctr.log)

crystal-lang - Crystal 中的自动转换 - 我可以告诉编译器忽略类型错误吗? (例如指令中)

crystal-lang - 寻找一种方法来保存对类的引用,以便我可以稍后动态实例化它

crystal-lang - 我如何在 Crystal 中的抽象类上指定实例方法?

jakarta-ee - 使用 CDI 记录最佳方法

c# - 带有 AdoNetAppender 的 Log4Net - 没有任何反应

python - 使用 Apache 运行 Flask 时打印件去了哪里?

java - log4j - 指向多个 log4j.properties 文件之一

crystal-lang - 如何安装旧版本的 Crystal Lang?

debugging - 使用 GDB 进行 Crystal 调试