這個腳本被命名爲o.rb
:爲什麼記錄器輸出到標準輸出重定向到文件?
@logger = Logger.new(STDOUT)
@logger.info "start_time : #{start_time}"
當我使用./o.rb
運行它,在控制檯上的輸出是正確的。我試過./o.rb > log.txt 2>&1
,日誌文件是空的!
這是爲什麼發生?
我在使用簡單的puts
函數時遇到同樣的問題。
UPDATE
這將重現此問題:
require 'logger'
logger = Logger.new(STDOUT)
loop do
logger.info "This is a test haha"
sleep(1)
end
當我運行它使用./foo.rb
,它正確地寫入到控制檯輸出。
當我運行./foo.rb > log.txt
時,我什麼也沒得到。
此外,當我使用./foo.rb | tee log.txt
時,沒有任何內容寫入控制檯,並且日誌文件爲空。
log.txt文件已創建但保持爲空。
我的Ruby版本是1.8.7。
適用於我... – sarnold 2011-12-18 02:43:36
我的程序可能會持續運行一天,是否由於文件緩衝區沒有被刷新?剛纔我寫了一個簡單的腳本,只輸出一個句子和程序退出,它的工作原理。 – nttstar 2011-12-18 03:14:27
我不認爲它是緩衝; ['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) - 要求進行無緩衝操作。 – sarnold 2011-12-18 03:47:42