2015-04-21 2 views
0

Я использовал puts и print и \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

Это не то же самое поведение, как с помощью '«\ г» ', который перемещает курсор в начало строки перезаписи существующих символов, эмуляция движения Возврат каретки TTY. –

+0

@theTinMan это точно так же, если вы добавите '\ r' в конце сообщения журнала. Обновлен образец кода, чтобы сделать его более очевидным. –

Смежные вопросы