Kịch bản này được đặt tên o.rb
:Tại sao đầu ra Logger không được chuyển sang tệp STDOUT?
@logger = Logger.new(STDOUT)
@logger.info "start_time : #{start_time}"
Khi tôi chạy nó bằng cách sử ./o.rb
, sản lượng trên giao diện điều khiển là đúng.
Tuy nhiên, khi tôi thử ./o.rb > log.txt 2>&1
, tệp nhật ký trống!
Tại sao điều này lại xảy ra?
Tôi gặp vấn đề tương tự khi sử dụng chức năng puts
đơn giản.
CẬP NHẬT
này sẽ tạo lại vấn đề này:
require 'logger'
logger = Logger.new(STDOUT)
loop do
logger.info "This is a test haha"
sleep(1)
end
Khi tôi chạy nó bằng cách sử ./foo.rb
, nó viết một cách chính xác để giao diện điều khiển đầu ra.
Khi tôi chạy ./foo.rb > log.txt
, tôi không nhận được gì.
Ngoài ra, khi tôi sử dụng ./foo.rb | tee log.txt
, không có gì được ghi vào bảng điều khiển và tệp nhật ký trống.
Tệp log.txt đã được tạo nhưng vẫn trống.
Phiên bản Ruby của tôi là 1.8.7.
Làm việc cho tôi ... – sarnold
Chương trình của tôi sẽ tiếp tục chạy trong một ngày, do bộ đệm tệp không bị xóa? Chỉ cần bây giờ tôi viết một kịch bản đơn giản mà chỉ xuất một câu và thoát khỏi chương trình, nó hoạt động. – nttstar
Tôi không nghĩ rằng đó là bộ đệm; Các cuộc gọi ['LogDevice :: new'] (http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger/LogDevice.html#method-c-new) [' @dev .sync = true'] (http://www.ruby-doc.org/core-1.9.3/IO.html#method-i-sync-3D) - yêu cầu thao tác không bị chặn. – sarnold