将单独的日志连接到主Rails开发日志

时间:2013-06-07 19:19:02

标签: ruby-on-rails ruby-on-rails-3 logging development-environment delayed-job

这与我在其他地方看到的question相反,其中有人想看看如何从主开发日志创建另一个独立的Rails日志。出于某种原因,我的Rails应用程序将我的DelayedJob gem的活动记录到单独的日志(delayed_job.log),但我希望它能够登录到主development.log文件。我正在使用Workless gem和NewRelic,如果这可能是相关的(尽管我通过删除NewRelic进行了实验,但问题仍然存在)。

我不清楚这是怎么发生的。但是,我之前在日志中看到SQL插入和删除时遇到了一些问题,而另一个用户several times在初始化文件中使用了以下内容:

if defined?(Rails) && !Rails.env.nil?
  logger = Logger.new(STDOUT)
  ActiveRecord::Base.logger = logger
  ActiveResource::Base.logger = logger
end

一旦我这样做,我就看到了SQL语句,但是在主开发日志中不再看到DelayedJob信息。

所以我的问题是:如何确保DelayedJob活动记录到主开发日志?我不介意它是否也记录到一个单独的日志,但重要的是我在Mac的控制台中看到它的活动。

如果您想从我的应用中获得更多代码,请告诉我们 - 我很乐意提供。非常感谢Rails新手。

2 个答案:

答案 0 :(得分:0)

尝试将以下行添加到config / initializers / delayed_job_config.rb

Delayed::Worker.logger = Logger.new(STDOUT)

答案 1 :(得分:0)

我终于开始工作了。感谢Seamus Abshere对问题here的回答。我将他在下面发布的内容放在初始化文件中。这得到delayed_job登录到我的development.rb文件(huzzah!)。

但是,delayed_job仍然没有登录我的控制台(原因我还是不明白)。我通过打开一个新的控制台选项卡并输入tail -f log/development.log来解决这个问题。

与Seamus所写的不同,auto-flushing=true在Rails 4中被弃用,我的Heroku应用程序崩溃了。我通过将其从初始化程序文件中删除并将其作为environments/development.rb放在我的config.autoflush_log = true文件中解决了这个问题。但是,我发现两种类型的冲洗都不是完成这项工作所必需的。

这是他的代码(没有自动刷新):

file_handle = File.open("log/#{Rails.env}_delayed_jobs.log", (File::WRONLY | File::APPEND | File::CREAT))
# Be paranoid about syncing
file_handle.sync = true
# Hack the existing Rails.logger object to use our new file handle
Rails.logger.instance_variable_set :@log, file_handle
# Calls to Rails.logger go to the same object as Delayed::Worker.logger
Delayed::Worker.logger = Rails.logger

如果上述代码无效,请尝试将Rails.logger替换为RAILS_DEFAULT_LOGGER