Итак, у меня есть приложение, которое раньше не нуждалось в 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 (и нигде я не устанавливаю уровень ведения журнала, поэтому он должен по-прежнему будет по умолчанию)
Любая помощь или предложения будут с благодарностью!! Спасибо