【问题标题】:how to change the rails logger to use standard out from rake tasks (rails2)如何更改 Rails 记录器以使用来自 rake 任务的标准输出(rails2)
【发布时间】:2011-06-15 13:29:31
【问题描述】:

当我这样做时

Rails.logger.debug "hello world" 从我的 rake 任务中我希望它记录到标准输出。

如何在我的 rake 任务中将 rails logger 设置为 Logger.new(STDOUT)?

我希望我的应用程序在通过控制器等时记录到文件中,只是希望 rake 任务进入标准输出,因为我的监控设置方式。

我在想我可以定义另一个环境并使用该配置,但可能有点矫枉过正,我想要每个环境中的所有相同环境变量,只是想更改我的日志目标的位置。

目前我有一个使用 puts 的日志助手,但我想利用 rails 日志的格式和缓冲。

【问题讨论】:

    标签: ruby-on-rails logging


    【解决方案1】:

    我刚刚做了Rails.logger = Logger.new(STDOUT),这也有效(rails3)

    【讨论】:

      【解决方案2】:

      您可以通过这种方式重置默认记录器:

      RAILS_DEFAULT_LOGGER = Logger.new(STDOUT)

      您还可以为应用程序的特定部分(ActiveRecord、ActionController...)设置记录器,如下所示:

      ActiveRecord::Base.logger = Logger.new(STDOUT)

      【讨论】:

      • 试过这个并得到:/lib/tasks/fetch_influencers.rake:4:动态常量分配RAILS_DEFAULT_LOGGER = Logger.new(STDOUT)(我认为你的解决方案适用于rails3,我需要一个rails2解决方案)
      • 这是警告还是错误?如果您这样做会收到警告,因为您正在更改常量,但您应该仍然可以这样做。
      • lib/tasks/fetch_data.rake:4: 动态常量赋值 RAILS_DEFAULT_LOGGER = Logger.new(STDOUT)
      • 没错,你会得到一个警告,但你不会得到一个错误。因此,您仍然可以执行此操作,而您的应用程序不会引发错误。
      • 这在 Rails 单元测试中的 Ruby 1.8.7 中绝对行不通:Uncaught exception: test/unit/foo_test.rb:30: dynamic constant assignment: RAILS_DEFAULT_LOGGER = Logger.new(StringIO.new)
      【解决方案3】:

      使用 rails 4,您将使用 gem rails_12factor。把它放到你的 Gemfile 中,瞧! 宝石'rails_12factor_'

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-21
        • 1970-01-01
        相关资源
        最近更新 更多