Logi jeszcze bardziej czytelne

Zupełnie niedawno rozpisywałem się nad tym jak dodać trochę luksusu do współpracy z logami z railsów, a tu proszę znalazłem plugin który jeszcze bardziej poprawia czytelność logów.

Plugin nazywa się Query Trace. Rozszerza on informacje o zapytaniach SQL jakie trafiają do logów. Ta dodatkowa informacja to call trace prowadzący do miejsca z którego kwerenda została wykonana. Cytując autora, w logach zamiast:

CODE:
  1. Schedule Load (0.023687)   SELECT * FROM schedules WHERE (schedules.id = 3) LIMIT 1
  2. Resource Load (0.001076)   SELECT * FROM resources WHERE (resources.id = 328) LIMIT 1

znajdziemy:

CODE:
  1. Schedule Load (0.023687)   SELECT * FROM schedules WHERE (schedules.id = 3) LIMIT 1
  2.     app/models/available_work.rb:50:in `study_method'
  3.     app/helpers/plan_helper.rb:4:in `work_description'
  4.     app/views/plan/_resource_schedule.rhtml:27:in `_run_rhtml_plan__resource_schedule'
  5.     app/views/plan/_resource_schedule.rhtml:24:in `_run_rhtml_plan__resource_schedule'
  6.     app/views/plan/_schedule_listing.rhtml:5:in `_run_rhtml_plan__schedule_listing'
  7.     app/views/plan/_schedule_listing.rhtml:3:in `_run_rhtml_plan__schedule_listing'
  8.     app/views/plan/_schedule_listing.rhtml:1:in `_run_rhtml_plan__schedule_listing'
  9.     app/views/plan/index.rhtml:6:in `_run_rhtml_plan_index'
  10.     vendor/plugins/textmate_footnotes/lib/textmate_footnotes.rb:60:in `render'
  11. Resource Load (0.001076)   SELECT * FROM resources WHERE (resources.id = 328) LIMIT 1
  12.     app/models/available_work.rb:54:in `div_type'
  13.     app/helpers/plan_helper.rb:6:in `work_description'
  14.     app/views/plan/_resource_schedule.rhtml:27:in `_run_rhtml_plan__resource_schedule'
  15.     app/views/plan/_resource_schedule.rhtml:24:in `_run_rhtml_plan__resource_schedule'
  16.     app/views/plan/_schedule_listing.rhtml:5:in `_run_rhtml_plan__schedule_listing'
  17.     app/views/plan/_schedule_listing.rhtml:3:in `_run_rhtml_plan__schedule_listing'
  18.     app/views/plan/_schedule_listing.rhtml:1:in `_run_rhtml_plan__schedule_listing'
  19.     app/views/plan/index.rhtml:6:in `_run_rhtml_plan_index'
  20.     vendor/plugins/textmate_footnotes/lib/textmate_footnotes.rb:60:in `render'

Po testach plugina w połączeniu z moim ChainsawOutputterm, postanowiłem nieco zmodyfikować kod plugina, żeby zwiększyć czytelność komunikatów trafiających do Chainsaw. Cała modyfikacja sprowadza się do zmiany oryginalnej implementacji metody QueryTrace#log_info_with_trace() na taką:

RUBY:
  1. def log_info_with_trace(sql, name, runtime)
  2.     if @logger and @logger.debug?
  3.         trace = clean_trace(caller[2..-1])
  4.         fmt_trace = trace.join("\n")
  5.         sql += "\nCall trace:\n#{fmt_trace}"
  6.     end
  7.     log_info_without_trace(sql, name, runtime)
  8.   end

(podmiana tej metody jest spowodowana tylko chęcią poprawy czytelności, Query Trace z orginalną metodą działa również).

Miłej analizy logów :)

[ ]
Spodobało się? Podziel się z innymi: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • Wykop
  • Gwar
  • Digg
  • Technorati

Dodaj komentarz