Este script se llama o.rb
:¿Por qué la salida de Logger a STDOUT no se redirige a los archivos?
@logger = Logger.new(STDOUT)
@logger.info "start_time : #{start_time}"
Cuando corro usando ./o.rb
, la salida de la consola es correcta.
Sin embargo, cuando probé ./o.rb > log.txt 2>&1
, ¡el archivo de registro está vacío!
¿Por qué sucedió esto?
Tengo el mismo problema al utilizar la función simple puts
.
ACTUALIZACIÓN
Esto reproducir este problema:
require 'logger'
logger = Logger.new(STDOUT)
loop do
logger.info "This is a test haha"
sleep(1)
end
Cuando corro usando ./foo.rb
, escribe correctamente a la salida de la consola.
Cuando ejecuto ./foo.rb > log.txt
, no obtengo nada.
Además, cuando uso ./foo.rb | tee log.txt
, no se escribe nada en la consola y el archivo de registro está vacío.
El archivo log.txt se creó pero permanece vacío.
Mi versión de Ruby es 1.8.7.
funciona para mí ... Mi voluntad – sarnold
programa mantiene funcionando tal vez por 1 día, es causada por los archivos de memoria intermedia no enrojecida? Justo ahora escribo un script simple que solo da salida a una oración y el programa sale, funciona. – nttstar
No creo que sea buffering; ['LogDevice :: new'] (http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger/LogDevice.html#method-c-new) calls [' @dev .sync = true'] (http://www.ruby-doc.org/core-1.9.3/IO.html#method-i-sync-3D) - que solicita una operación sin búfer. – sarnold