这个脚本被命名为o.rb
:
@logger = Logger.new(STDOUT)
@logger.info "start_time : #{start_time}"
当我使用 ./o.rb
运行它时,控制台上的输出是正确的。
但是,当我尝试 ./o.rb > log.txt 2>&1
时,日志文件是空的!
为什么会这样?
我在使用简单的 puts
函数时遇到了同样的问题。
更新
这将重现此问题:
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。
最佳答案
这是一个缓冲问题,您可以将标准输出设置为同步,这应该可以解决。
#!/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
关于ruby - 为什么 Logger 输出到 STDOUT 不会重定向到文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8549443/