2012-04-13 2 views
4

В настоящее время у меня есть приложение Rails, которое имеет несколько процессов: процессы веб-обслуживания и фоновые работники, которые запускаются Redis.Добавить информацию о процессе в Rails logger

Проблемам иногда бывает сложно проверить файлы журнала и определить, где произошло данное поведение - было ли это на веб-части или на рабочих Resque?

Есть ли способ включить имя процесса или даже идентификатор процесса или что-то, что позволяет мне различать каждую запись в журнале процессом?

ответ

3

Похоже, есть несколько вариантов там для этого:

Вот родственный SO статья: - Rails 3.2.2 log files unordered, requests intertwined

Лучше всего мне кажется, использовать: UUID вместо этого. Он передает одну и ту же информацию, чтобы вы могли различать запросы, когда несколько процессов регистрировались в одном файле.

+0

Это выглядит очень круто, спасибо за ваш ответ. Я соглашусь с ним, потому что прошло какое-то время, и никто больше не ответил. – kolrie

+0

2-я ссылка не работает – pahnin

2

Если вам нужен идентификатор процесса вне контекста контроллера (IE, задержка работы), вы можете поместить это, я инициализатор:

class ActiveSupport::BufferedLogger 
    def formatter=(formatter) 
    @log.formatter = formatter 
    end 
end 

class Formatter 
    SEVERITY_TO_COLOR_MAP = {'DEBUG'=>'0;37', 'INFO'=>'32', 'WARN'=>'33', 'ERROR'=>'31', 'FATAL'=>'31', 'UNKNOWN'=>'37'} 

    def call(severity, time, progname, msg) 
    formatted_severity = sprintf("%-5s","#{severity}") 

    formatted_time = time.strftime("%Y-%m-%d %H:%M:%S.") << time.usec.to_s[0..6].ljust(6) 
    color = SEVERITY_TO_COLOR_MAP[severity] 

    "\033[0;37m#{formatted_time} (pid:#{$$})\033[0m [\033[#{color}m#{formatted_severity}\033[0m] #{msg.strip}\n" 
    end 

end 

Rails.logger.formatter = Formatter.new 

Подробнее здесь: http://www.software-thoughts.com/2013/08/adding-process-id-and-timestamps-to.html

Оригинальный пост здесь: http://cbpowell.wordpress.com/2012/04/05/beautiful-logging-for-ruby-on-rails-3-2/

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