Rails:在 lib 目录中记录代码?

Posted

技术标签:

【中文标题】Rails:在 lib 目录中记录代码?【英文标题】:Rails: Logging for code in the lib directory? 【发布时间】:2011-02-28 03:49:18 【问题描述】:

为保存在 lib 目录中的代码配置日志记录的最佳/最简单方法是什么?

【问题讨论】:

【参考方案1】:

有两种方法:

假设您的库是独立的并且有一个模块,您可以将logger 属性添加到您的模块并在您的库代码中的任何地方使用它。

module MyLibrary
  mattr_accessor :logger
end

然后,您可以使用config/initializers/ 中的初始化程序或config/environment.rb 中的config.after_initialize 块来初始化您的记录器,如下所示:

require 'mylibrary'
MyLibrary.logger = Rails.logger

这仍然允许您从 Rails 之外的脚本中使用自包含库。这很好,偶尔。

如果在没有 Rails 的情况下使用库真的没有意义,那么你也可以直接使用 Rails.logger

在任何一种情况下,您都在处理标准的 Ruby Logger。还要记住,理论上,记录器可能是nil

【讨论】:

谢谢,这正是我想要的。 注意:此答案包含不正确的信息,编辑不希望我修复它们。除非(也许)您使用的是早于 2.0 的 Rails,否则您不是“处理标准的 Ruby Logger”。 Rails 现在使用ActiveSupport::BufferedLogger。如果您决定为(例如)包含在 Rails 项目中的 cron 作业实例化一个单独的记录器,以避免“污染”标准 Rails 日志。在这种情况下,请确保使用 ActiveSupport::BufferedLogger.new 而不仅仅是 Logger.new。我试过了,它没有用。【参考方案2】:

我们可以直接在lib中使用Rails logger,见下面sn-p。

require 'logger'

Rails.logger.info "Hay..!!! Im in lib"
Rails.logger.debug "Debugging this object from Lib #object.inspect"
Rails.logger.error "This is an error..."

【讨论】:

这对我有用,最后,在我意识到我需要 之后。这是完全显而易见的,一旦你知道了,但有一段时间对我来说并不明显。 缺点是你的库代码现在依赖于提供记录器的 Rails,不能独立使用。

以上是关于Rails:在 lib 目录中记录代码?的主要内容,如果未能解决你的问题,请参考以下文章

在 rails 3 中设置记录器

Rails 库目录

在 Rails 中,更新记录或创建新记录(如果不存在)的最佳方法是啥?

在 Rails 4 中自动加载 lib 文件

在控制台中禁用 Rails SQL 日志记录

Ruby on Rails 3 - 为每个请求重新加载 lib 目录