Средство форматирования неопределенного метода для Log4r в RAILS 4.0

Я получаю эту ошибку после обновления Rails с 3.1.2 до 4.0. При запуске моего сервера с рельсами я застрял со следующей ошибкой

C:/ruby-2.0.0/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands/server.rb:78:in `start': undefined method `formatter' for #<Log4r::Logger:0x26dd908> (NoMethodError)

Я был на сайте Log4r, но не получил никакой информации об ошибке при обновлении Rails.

Кто-нибудь знает, откуда эта ошибка. Спасибо!


person Pol0nium    schedule 20.09.2013    source источник
comment
Недавно я начал работать над приложениями для рельсов, написанными с использованием рельсов 4.1.7. Я попытался переключиться на log4r и получил ту же ошибку.   -  person hshib    schedule 07.12.2015
comment
Обнаружена проблема, о которой сообщалось в Rails, и закрыто обвинение в том, что log4r не реализует стандартный API регистратора: github.com/rails /рельсы/проблемы/14227   -  person hshib    schedule 07.12.2015


Ответы (1)


Метод formatter определен не в Log4r::Logger, а в Log4r::FileOutputter. Поэтому я удивлен, что это работает до обновления Rails. Возможно, это изменилось в разных версиях Log4r.

Пожалуйста, попробуйте следующее (с измененными именами файлов и шаблонами):

require 'log4r'
outputter = Log4r::FileOutputter.new('log4r', filename: 'foobar.log')
outputter.formatter = Log4r::PatternFormatter.new(
  date_pattern: "%FT%T.000Z", pattern: "%d [%l] %m"
)

logger = Log4r::Logger.new('log4r')
logger.outputters = [outputter]

Добавьте этот код в config/application.rb или в новый файл, например config/initializers/logger.rb.

person spickermann    schedule 20.09.2013
comment
Извините, что вмешиваюсь в старый вопрос, но я несколько удивлен, что это должно работать: Rails хочет получить доступ к Rails.logger.formatter, а ваш код не добавляет свойство форматирования в регистратор, а только средство вывода. - person milgner; 15.06.2014
comment
@ma_il: Из описания ошибки кажется, что реализация изменилась между версиями: в более старых версиях Rails вызывал formatter на самом logger. В более новой версии он вызывает formatter на logger.outputer, возможно, через делегат в реализации Log4r. Я не знаю первопричины проблемы. Я увидел вопрос и искал вероятное объяснение (это не formatter на logger, а на outputer) и написал код для проверки этих гипотез. Кажется, это было правильно. Если это решение не решит вашу проблему, я предлагаю задать другой вопрос. - person spickermann; 16.06.2014
comment
А, это объясняет. Большое спасибо! - person milgner; 23.06.2014
comment
куда прописать вышеуказанные настройки - person vishB; 03.07.2014
comment
@vishB в config/application.rb или файле типа config/initializers/logger.rb. - person spickermann; 03.07.2014