【问题标题】:How to write log inside my rubygem that will be used in a rails app?如何在我的 ruby​​gem 中写入将在 Rails 应用程序中使用的日志?
【发布时间】:2015-08-17 20:31:18
【问题描述】:

我正在开发一个将在 rails 应用程序中使用的 ruby​​gem。在这个 ruby​​gem 中,我需要记录一些信息(警告、错误......)。

我看到了一些可以执行此操作的 gem,例如 logging,但显然我不需要配置日志输出(标准输出、某些文件)。
我的 rails 应用程序将消息记录在一个文件中。所以,我的问题:有没有办法让我的 gem 使用我的 rails 应用程序使用的相同日志配置?还是我的gem会根据自己的配置发送日志?

【问题讨论】:

  • 如果定义了 Rails 记录器,您可以检查您的 gem,如果是,请使用它,否则您可以回退到 STDOUT 或其他一些实现。

标签: ruby-on-rails ruby logging


【解决方案1】:

您可以直接使用Rails.logger,如果您的gem 始终只在Rails 应用程序中使用,这是有效的。您也可以为您的 gem 命名空间定义一个记录器,如果已定义,则默认为 Rails.logger,如果未定义,则默认为 Logger.new(STDOUT),以及写入器,因此它是可覆盖的:

module MyGem
  def self.logger
    @@logger ||= defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
  end

  def self.logger=(logger)
    @@logger = logger
  end
end

无论如何,你都会这样使用它:

MyGem.logger.debug "it works"

【讨论】:

  • 我一直为此使用 Rails.logger。这似乎是最简单/最直接的方法。
  • 这个答案让我难以置信!我只是想添加一些我遇到的东西。我有一个带有Minitest::Reporters.use! 声明的test_helper.rb,令我惊讶的是,它加载了Rails,因此MyGem.logger 引发了一个错误。我修复了它,将 defined?(Rails) 更改为 defined?(Rails.logger),现在它可以完美运行了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2020-04-13
  • 1970-01-01
  • 2017-01-06
  • 2023-04-05
  • 2011-12-19
相关资源
最近更新 更多