Ruby logger теряет форматирование - PullRequest
3 голосов
/ 12 февраля 2011

У меня есть консольное приложение ruby. Когда я проверяю это в irb на моей машине разработчика, это регистрирует хорошо. Но когда я запускаю его в виртуальной машине, ruby ​​logger теряет форматирование, то есть регистрирует только сообщения без даты и серьезности. Теперь это решается установкой форматирования с Logger.formatter = proc { |severity, datetime, progname, msg| ...}. Но мне любопытно, почему это могло произойти? Я гуглил и нашел довольно старую информацию о том, что это может произойти в приложении Rails. Это известная проблема? Мне потребовалось некоторое время, чтобы отладить это.

Ответы [ 2 ]

2 голосов
/ 12 февраля 2011

Вы require используете разные драгоценные камни в разных средах, или же сам IRB устанавливает формат журнала? Что произойдет, если вы добавите require 'irb' в свое приложение, это также изменит форматирование?

Форматирование хранится в глобальной переменной, любой гем может переопределить его. Я был укушен подобной проблемой, когда я require d, в свою очередь, require d ActiveRecord, который устанавливает формат журнала.

Это просто показывает, как плохо использовать глобальные переменные для конфигурации, что слишком часто встречается в гемах Ruby.

1 голос
/ 13 марта 2012

FYI в Rails 3, это изменилось, и это уже не метод Class, а метод экземпляра. Так что он не используется всеми экземплярами, и гемы не должны больше мешать вашим настройкам входа в систему.

Это означает, что Rails 3 требует, чтобы этот код изменил форматирование только для экземпляра логгера:

log = Logger.new('file.log')
log.formatter = proc { |severity, datetime, progname, msg| ...}
...