2015-04-21 69 views
0

我在使用putsprint\r來重寫同一行中的內容。紅寶石與記錄儀在同一條線上多次打印

例如:

print "Fetching items...\r" 

    #some loop here. 
    print "Fetching items... #{i}/#{count}\r" 
    #some loop here. 

    puts "Fetching items... Done!" 

現在我決定使用內置紅寶石記錄任何日誌輸出。

記錄儀可以做同樣的事情嗎?

回答

0

只需使用自定義格式:

require 'logger' 

class SimpleFormatter < Logger::Formatter 

Format = "%s, [%s#%d] %5s -- %s: %s" 

def call(severity, time, progname, msg) 
    m = msg2str(msg) 
    m << "\n" unless m[-1] == "\r" 
    Format % [severity[0..0], format_datetime(time), $$, severity, progname, 
    m] 
end 
end 

logger = Logger.new(STDOUT) 
logger.formatter = SimpleFormatter.new 
logger.info("123\r"); sleep(2); logger.info("234\r"); sleep(2); logger.info("345") 
+0

這是不相同的行爲使用'爲「\ r」',其光標移動到線覆蓋現有的字符的起始,模擬的運動TTY的回車。 –

+0

@theTinMan如果您在日誌消息的末尾添加'\ r',它肯定是一樣的。更新了代碼示例以使其更加明顯。 –