0

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

我不清楚这是怎么发生的。但是,我之前在日志中看到 SQL 插入和删除时遇到了一些麻烦,另一位用户好心地建议我在初始化文件中使用以下内容:

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

执行此操作后,我看到了 SQL 语句,但在主开发日志中不再看到 DelayedJob 信息。

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

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

4

2 回答 2

0

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

Delayed::Worker.logger = Logger.new(STDOUT)
于 2013-06-07T21:35:30.660 回答
0

我终于让这个工作了。多亏了 Seamus Abshere 对这里问题的回答。我将他在下面发布的内容放在初始化文件中。这让 delay_job 登录到我的 development.rb 文件(huzzah!)。

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

但是,与 Seamus 所写的不同,auto-flushing=trueRails 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.loggerRAILS_DEFAULT_LOGGER.

于 2013-06-13T21:52:43.243 回答