En una tarea de rake, si utilizo el comando put, veo el resultado en la consola. Sin embargo, no veré ese mensaje en el archivo de registro cuando la aplicación se implemente en producción.
Sin embargo, si digo Rails.logger.info, en el modo de desarrollo no veo nada en la consola. Necesito ir al archivo de registro y seguirlo.
Idealmente, me gustaría usar Rails.logger.info y en el modo de desarrollo dentro de la tarea de rake, la salida del registrador también debe enviarse a la consola.
¿Hay alguna forma de lograrlo?
fuente
Rails.logger = Logger.new(STDOUT)
en desarrollo.rb?config.logger = Logger.new(STDOUT)
Puede crear una nueva tarea de rake para que esto funcione.
De esta manera, cuando ejecuta su tarea de rake, puede agregar to_stdout primero para obtener los mensajes de registro de stdout o no incluirlo para que los mensajes se envíen al archivo de registro predeterminado
fuente
Las tareas de rake las ejecuta un usuario, en una línea de comandos. Todo lo que necesiten saber de inmediato ("5 filas procesadas") debe enviarse al terminal con
puts
.Todo lo que deba guardarse para la posteridad ("correo electrónico de advertencia enviado a [email protected]") debe enviarse a
Rails.logger
.fuente
Yo diría que consumir
Rails.logger.info
es el camino a seguir.No podrá verlo en la consola del servidor porque no se ejecutará a través del servidor. Simplemente abra una nueva consola y
tail -f
el archivo de registro, funcionará.( vía )
fuente
tailf
"Es similar a tail -f pero no accede al archivo cuando no está creciendo" (desde la página de manual). También es más cortoCódigo
Para Rails 4 y posteriores, puede usar la transmisión de Logger .
Si desea obtener tanto STDOUT como el registro de archivos para tareas de rake en modo de desarrollo, puede agregar este código en
config/environments/development.rb
:Prueba
Aquí hay una pequeña tarea de Rake para probar el código anterior:
rake stdout_and_log:test
Salidas en ejecuciónmientras
se ha agregado a
log/development.log
.rake stdout_and_log:test RAILS_ENV=production
Salidas en ejecuciónmientras
se ha agregado a
log/production.log
.fuente
basename($0) == 'rake'
truco ya no funciona, porquerails
se ejecuta el comando en sírake
. Me encantaría encontrar un buen reemplazo para él más allá de depender de una tarea que configure elbroadcast
. (Esa parte, al menos, todavía funciona bien.)Rakefile
la raíz de su proyecto¿Qué tal crear un asistente de aplicación que detecte qué entorno se está ejecutando y hace lo correcto?
Luego llame a output_debug en lugar de put o logger.info
fuente
En Rails 2.X para redirigir el registrador a STDOUT en modelos:
Para redirigir el registrador en los controladores:
fuente
Ejecute un trabajo en segundo plano con '&' y abra el script / consola o lo que sea. De esa manera, puede ejecutar varios comandos en la misma ventana.
note Puede volverse descuidado rápidamente cuando hay mucha salida de registro.
fuente