【问题标题】:How to load Rails.logger in an executable file?如何在可执行文件中加载 Rails.logger?
【发布时间】:2017-09-27 16:06:41
【问题描述】:

我的rails 应用程序中有一个可执行文件bin/log_data。在此文件中,为了访问Rails.logger,我必须要求以下文件:

APP_PATH = File.expand_path('../config/application', __dir__)
require 'rails/commands'

这会在运行bin/log_data 的这个进程中加载​​整个rails 环境,我认为这种方法有点笨拙。谁能与我分享我将如何加载 Rails.logger 以便我可以执行 `Rails.logger.info('something relative important to log')?

另外,只是一些背景信息,我想使用 Rails.logger 用户,因为输出转到 log/development.log,这对于我希望在跟踪我的应用程序时在 heroku 日志中看到的内容很重要。

【问题讨论】:

    标签: ruby-on-rails logging heroku ruby-on-rails-5 worker


    【解决方案1】:

    您可以只创建一个ActiveSupport::Logger 实例:

    require 'active_support/logger'
    APP_PATH = File.expand_path('../config/application', __dir__)
    rails_env = ENV["RAILS_ENV"] || "development"
    logger = ActiveSupport::Logger.new(APP_PATH + "/logs/#{rails_env}.log")
    

    如果你真的想调用它为Rails.logger 创建一个模块:

    require 'active_support/logger'
    require 'active_support/string_inquirer'
    APP_PATH = File.expand_path('../config/application', __dir__)
    logger = ActiveSupport::Logger.new(APP_PATH + "/logs/#{rails_env}.log")
    
    module Rails
      class << self
        attr_reader :logger
        attr_reader :env
      end
      self.env = ActiveSupport::StringInquirer.new(ENV["RAILS_ENV"] || "development")
      self.logger = ActiveSupport::Logger.new(APP_PATH.join("logs", "#{self.env}.log"))
    end
    

    请注意,在日志级别和格式方面,它与 Rails 记录器的设置并不完全相同,只有通过启动 rails 应用才能真正获得。

    【讨论】:

      猜你喜欢
      • 2021-02-15
      • 2014-09-05
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 2019-03-09
      相关资源
      最近更新 更多