Bu komut dosyası o.rb
adlandırılır: Ben ./o.rb
kullanarak çalıştırdığınızdaNeden Logger çıkışı STDOUT'a dosyalara yönlendiriliyor?
@logger = Logger.new(STDOUT)
@logger.info "start_time : #{start_time}"
, konsolda çıktı doğrudur.
Ancak, ./o.rb > log.txt 2>&1
'u denediğimde, günlük dosyası boş!
Bu neden oldu?
Basit puts
işlevini kullanırken aynı sorunu yaşıyorum. Bu, bu sorunu yeniden edecek
GÜNCELLEME:
require 'logger'
logger = Logger.new(STDOUT)
loop do
logger.info "This is a test haha"
sleep(1)
end
Ben ./foo.rb
kullanarak çalıştırmak, bu konsol çıkışa doğru yazar.
./foo.rb > log.txt
'u çalıştırdığımda hiçbir şey alamıyorum.
Ayrıca, ./foo.rb | tee log.txt
'u kullandığımda, konsola hiçbir şey yazılmaz ve günlük dosyası boş.
Log.txt dosyası oluşturuldu ancak boş bırakıldı.
Ruby sürümüm 1.8.7'dir.
İşleri ... – sarnold
Programım irade 1 gün belki çalışan, bu değil boşaltılan dosya tampon kaynaklanır tutar? Sadece şimdi sadece bir cümle ve program çıktısını veren basit bir betik yazdım, işe yarıyor. – nttstar
Sanırım arabelleğe almıyor; ['LogDevice :: new'] (http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger/LogDevice.html#method-c-new) [' @dev çağırır .sync = true'] (http://www.ruby-doc.org/core-1.9.3/IO.html#method-i-sync-3D) - arabelleğe alınmamış işlemi sorar. – sarnold