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

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

我不清楚这是怎么发生的。 但是,我之前在日志中看到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新手。

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

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

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

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

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

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

 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_DEFAULT_LOGGER替换RAILS_DEFAULT_LOGGER

Interesting Posts