Форматирование журналов Rails при использовании ActiveRecord

Итак, у меня есть приложение, которое раньше не нуждалось в ActiveRecord — поэтому мы удалили ActiveRecord из приложения и отформатировали наш лог так:

В application.rb:

class DreamLogFormatter < Logger::Formatter
  SEVERITY_TO_COLOR_MAP   = {'DEBUG'=>'32', 'INFO'=>'0;37', 'WARN'=>'35', 'ERROR'=>'31', 'FATAL'=>'31', 'UNKNOWN'=>'37'}

  def call(severity, time, progname, msg)
    color = SEVERITY_TO_COLOR_MAP[severity]
    "\033[0;37m[%s] \033[#{color}m%5s - %s\033[0m\n" % [time.to_s(:short), severity, msg2str(msg)]
  end
end

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

В разработке.rb

config.logger = Logger.new("log/#{Rails.env}.log")
config.logger.formatter = DreamLogFormatter.new
ActiveResource::Base.logger =  Logger.new("log/#{Rails.env}.log")
ActiveResource::Base.logger.formatter = DreamLogFormatter.new

Примечание. Конфигурация регистратора ActiveResource была добавлена, потому что мы хотим, чтобы URL-адрес наших вызовов ActiveResource выводился следующим образом:

GET http://localhost:2524/users/
 --> 200 OK 239 (13.0ms)

Ведение журнала с этой конфигурацией дало нам хорошую комбинацию выходных данных вызовов ActiveResource и нашего собственного ведения журнала с использованием Rails.logger.

Однако нам нужно было добавить ActiveRecord обратно в наше приложение, поскольку нам нужно было изменить хранилище сеансов с хранилища файлов cookie на хранилище ActiveRecord. И с тех пор, как снова был добавлен ActiveRecord, ведение журнала перестало работать должным образом.

Предыдущий вывод журнала:

Started GET "/audit/?key1=value1&key2=value2" for 0:0:0:0:0:0:0:1%0 at 2012-08-15 15:39:58 -0400
[15 Aug 15:39]  INFO -   Processing by AuditController#index as HTML
[15 Aug 15:39]  INFO -   Parameters: {"utf8"=>"✓", "key1"=>"value1", "key2"=>"value2"}
[15 Aug 15:39]  INFO - GET http://localhost:2524/api/users/jeff/prefs/?label=language
[15 Aug 15:39]  INFO - --> 200 OK 151 (55.0ms)
[15 Aug 15:39]  WARN - There is no user currently logged in - retrieving default theme.
[15 Aug 15:39]  INFO - GET http://localhost:2524/api/users/jeff/prefs/?label=theme
[15 Aug 15:39]  INFO - --> 200 OK 151 (35.0ms)

Примечание. Что мне действительно нравится в этом формате, так это то, что каждый запрос регистрируется, начиная с Started GET <URL>, POST или PUT и т. д., после чего следует, какой контроллер и функция выполняет обработку и какие параметры отправляются. Это чрезвычайно полезно для отладки. Кроме того, этот формат позволял нам распечатывать нашу собственную Rails.logger регистрационную информацию.

Текущий вывод журнала (с ActiveRecord):

[20 Aug 11:40]  INFO - GET http://localhost:2524/api/users/jeff
[20 Aug 11:40]  INFO - --> 200 OK 199 (144.0ms)
[20 Aug 11:40]  INFO - GET http://localhost:2524/api/users/jeff/prefs/?label=language
[20 Aug 11:40]  INFO - --> 200 OK 148 (12.0ms)
[20 Aug 11:40]  INFO - GET http://localhost:2524/api/users/jeff/prefs/?label=theme
[20 Aug 11:40]  INFO - --> 200 OK 155 (15.0ms)

По сути, все, что мы получаем сейчас, — это постоянный поток вызовов URL-адресов — он не регистрирует ничего, поступающего от Rails.logger, а также нет разделения между различными запросами — это буквально один постоянный поток URL-адресов и ответов.


Я попытался установить ActiveResource::Base.logger = ActiveRecord::Base.logger, как рекомендуют многие блоги, но это только ухудшило ситуацию - он зарегистрировал пару URL-адресов, а затем просто полностью прекратил ведение журнала, если только он не был на уровне ERROR (и нигде я не устанавливаю уровень ведения журнала, поэтому он должен по-прежнему будет по умолчанию)

Любая помощь или предложения будут с благодарностью!! Спасибо


person Krista    schedule 20.08.2012    source источник


Ответы (1)


Возможно, поможет реализация lograge:

https://github.com/roidrage/lograge/blob/master/lib/lograge.rb#L57

person John Bachir    schedule 13.12.2012
comment
Привет Спасибо за ответ!!! Оказывается, я вернулся к ведению журнала, чтобы не использовать ActiveRecord, а затем через некоторое время попытался снова с ActiveRecord, и либо что-то изменилось, либо что-то непоследовательно, потому что все работало нормально... У меня нет лучшего объяснения, кроме этого: p Но я учту эту ссылку на будущее, спасибо! - person Krista; 18.12.2012