此脚本命名为o.rb
:
@logger = Logger.new(STDOUT)
@logger.info "start_time : #{start_time}"
Run Code Online (Sandbox Code Playgroud)
当我使用它时./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
Run Code Online (Sandbox Code Playgroud)
当我使用./foo.rb
它运行时,它正确写入控制台输出.
当我跑步时./foo.rb > log.txt
,我一无所获.
此外,当我使用时./foo.rb | tee log.txt
,没有任何内容写入控制台,日志文件为空.
log.txt文件已创建但仍为空.
我的Ruby版本是1.8.7.
Jos*_*eek 13
这是一个缓冲问题,您可以将标准输出设置为同步,这应该解决它.
#!/usr/bin/env ruby
require 'logger'
$stdout.sync = true
logger = Logger.new($stdout)
loop do
logger.info "This is a test haha"
sleep 1
end
Run Code Online (Sandbox Code Playgroud)