2010-05-18 12 views
6

Estoy intentando escribir en mis archivos de registro mientras ejecuto una tarea de rake. Funciona bien en el modo de desarrollo, pero tan pronto como cambio al entorno de producción, no se escribe nada en los archivos de registro.Rieles: ¿Cómo escribir en un archivo de registro personalizado desde una tarea de rake en modo de producción?

he leído aquí

How do I use a custom log for my rake tasks in Ruby on Rails?

que este es el comportamiento normal y también encontró un billete #wontfix en faro.

Mi pregunta: ¿Hay alguna manera de generar resultados, qué está pasando mientras se está ejecutando mi tarea de rake? Realiza algunos rastreos y se ejecuta durante horas. Yo preferiría si la salida fue en un archivo de registro específico, como /log/crawler.log

En este momento sólo estoy usando este comando para escribir en los archivos de registro:

ActiveRecord::Base.logger.info "Log Text" 

Gracias!

+0

corro mis tareas rastrillo en el modo de producción en un escenario similar. –

Respuesta

13

El problema que tiene es que los rieles ignoran los registros de nivel de 'información' en el modo de producción.

me gustaría recomendar la lectura de este: http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc/classes/Logger.html

y la creación de su propio registrador:

logger = Logger.new('logfile.log') 
logger.info "Something happened" 
+0

Tomé este enfoque. Está trabajando en desarrollo y entorno de ensayo. Pero el registro en logfile.log no ocurre en el entorno de producción. log_level de entornos de producción y producción es 1 - Logger :: INFO – Anand

2

Usted puede hacer un nuevo registrador con Logger.new ("file.log") y luego llamar a su métodos como este.

task :import_stuff => :environment do 
    require 'csv' 
    l = Logger.new("stuff.log") 
    csv_file = "#{RAILS_ROOT}/stuff.csv" 
    CSV.open(csv_file, 'r') do |row| 
     l.info row[1] 
    end 
    end 
2

Tal vez usted necesita para escribir el buffer donde lo necesite:

logger.flush 

o se puede activar el auto lavado:

task :foo => :environment do 
    Rails.logger.auto_flushing = 1 
    Rails.logger.info "bar" 
end 
Cuestiones relacionadas