Questo script è chiamato o.rb
:Perché l'output di Logger su STDOUT non viene reindirizzato ai file?
@logger = Logger.new(STDOUT)
@logger.info "start_time : #{start_time}"
Quando eseguo usando ./o.rb
, l'uscita sulla console è corretto.
Tuttavia, quando ho provato ./o.rb > log.txt 2>&1
, il file di registro è vuoto!
Perché è successo?
Ho lo stesso problema durante l'utilizzo della semplice funzione puts
.
UPDATE
Ciò riprodurre il problema:
require 'logger'
logger = Logger.new(STDOUT)
loop do
logger.info "This is a test haha"
sleep(1)
end
Quando eseguo usando ./foo.rb
, si scrive correttamente l'output della console.
Quando corro ./foo.rb > log.txt
, non ottengo nulla.
Inoltre, quando si utilizza ./foo.rb | tee log.txt
, non viene scritto nulla sulla console e il file di registro è vuoto.
Il file log.txt è stato creato ma rimane vuoto.
La mia versione di Ruby è 1.8.7.
Lavori per me ... – sarnold
Il mio programma continuerà a essere in esecuzione forse per 1 giorno, è causato dai buffer dei file non svuotati? Proprio ora scrivo un semplice script che emette solo una frase e l'uscita del programma, funziona. – nttstar
Non penso che funzioni nel buffer; ['LogDevice :: new'] (http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger/LogDevice.html#method-c-new) chiama [' @dev .sync = true'] (http://www.ruby-doc.org/core-1.9.3/IO.html#method-i-sync-3D) - che richiede l'operazione unbuffered. – sarnold