如何在可执行文件中加载Rails.logger?

时间:2017-09-27 16:06:42

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

我的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('记录相对重要的事情')?

另外,只是一些背景信息,我想要用户Rails.logger,因为输出转到log/development.log,这对于我想要记录在我的heroku日志中的内容非常重要

1 个答案:

答案 0 :(得分:0)

您只需创建一个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应用程序才能获得。