Код
Для Rails 4 и новее вы можете использовать Logger broadcast .
Если вы хотите получить как STDOUT, так и протоколирование файлов для задач rake в режиме разработки, вы можете добавить этот код в config/environments/development.rb
:
if File.basename($0) == 'rake'
# /1822530/stavit-vs-logger-v-zadachi-rake-rake
log_file = Rails.root.join("log", "#{Rails.env}.log")
Rails.logger = ActiveSupport::Logger.new(log_file)
Rails.logger.extend(ActiveSupport::Logger.broadcast(ActiveSupport::Logger.new(STDOUT)))
end
Тест
Вот небольшая задача Rake для проверки кода выше:
# lib/tasks/stdout_and_log.rake
namespace :stdout_and_log do
desc "Test if Rails.logger outputs to STDOUT and log file"
task :test => :environment do
puts "HELLO FROM PUTS"
Rails.logger.info "HELLO FROM LOGGER"
end
end
Работает rake stdout_and_log:test
Вывод
HELLO FROM PUTS
HELLO FROM LOGGER
, а
HELLO FROM LOGGER
был добавлен к log/development.log
.
Работает rake stdout_and_log:test RAILS_ENV=production
Вывод
HELLO FROM PUTS
, а
HELLO FROM LOGGER
был добавлен к log/production.log
.