2011-06-21 8 views
26

Kiedy przeglądam moje dzienniki Heroku na serwerze (z heroku logs --tail --app myapp) widzę coś takiego:Heroku: zobacz params i aktywność sql w logach?

2011-06-21T14:09:25+00:00 app[web.1]: Started PUT "/reports/19.xml" for 77.89.149.137 at 2011-06-21 07:09:25 -0700 
2011-06-21T14:09:25+00:00 heroku[router]: PUT myapp.heroku.com/reports/19.xml dyno=web.1 queue=0 wait=0ms service=7ms status=401 bytes=28 
2011-06-21T14:09:26+00:00 heroku[nginx]: PUT /reports/19.xml HTTP/1.1 | 77.89.149.137 | 656 | http | 401 

Chociaż w moim lokalnym dzienniku Chciałbym zobaczyć coś takiego:

Started PUT "/reports/19" for 127.0.0.1 at 2011-06-21 15:27:01 +0100 
    Processing by ReportsController#update as XML 
    Parameters: {"report"=>{"workflow_status"=>"3"}, "id"=>"19"} 
    Person Load (0.9ms) SELECT "people".* FROM "people" WHERE "people"."email" = '[email protected]' LIMIT 1 
    Report Load (0.4ms) SELECT "reports".* FROM "reports" WHERE "reports"."id" = 19 LIMIT 1 
DEPRECATION WARNING: Object#returning has been deprecated in favor of Object#tap. (called from update_report at /home/max/work/rails_apps/flamingo_container/flamingo/vendor/plugins/resource_this/lib/resource_this.rb:135) 
Creating scope :open. Overwriting existing method Task.open. 
    Task Load (2.0ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."id" = 14 LIMIT 1 
Completed 200 OK in 1648ms (Views: 568.2ms | ActiveRecord: 3.2ms) 

IE o wiele więcej informacji, w szczególności params, informacje z routera, wygenerowany sql, wszelkie szablony itp. itp.

Czy ktoś wie, w jaki sposób mogę uzyskać logi heroku, aby był równie szczegółowy jak mój program rozwojowy? Robiłem już następuje:

1) Ustaw poziom rejestrowania w odpowiednich szyn (3) plik Środowisko:

config.log_level = :debug 

2) Told Heroku użyć innego poziomu rejestratora, jak opisano na http://devcenter.heroku.com/articles/logging

heroku config:add LOG_LEVEL=DEBUG --app myapp #from CLI 

Żadna nie zmieniła ... żadnych pomysłów ktokolwiek?
dziękuję, max

Odpowiedz

39

Zasadniczo chcesz wyświetlać dane wyjściowe SQL/params w dziennikach Heroku. Można to zrobić dodając linię pokazaną poniżej bloku config wewnątrz pliku production.rb:

MyAppNameHere::Application.configure do 

    # add this line 
    config.logger = Logger.new(STDOUT) 

end 

Nawiasem mówiąc, ustawienie poziomu dziennika debugowania po prostu oznacza, że ​​Rails.logger.debug wyjście wola dzienników, gdy jesteś na Heroku

+0

aha, świetnie! dzięki :) –

+0

cieszę się z pomocy, max! – iwasrobbed

+2

Awesome! To działało również dla mnie, a wsparcie Heroku powiedziało mi, że jednym z moich klejnotów jest nadpisywanie wyników. Właściwiej byłoby dodać kod do 'production.rb' zamiast' application.rb', tylko myśl. – Bob

2

W swojej production.rb dodaj config.log_level = :debug i ponownie wdróż. To da ci te same logi, co tryb programowania :)

+0

Dzięki Zach, ale jak powiedziałem w moim poście już próbowałem tego. –

+0

Hmm. Czy próbowałeś przechwycić je innymi metodami? Coś szybkiego i brudnego, jak http://railscasts.com/episodes/277-mountable-engines może załatwić sprawę. Oczywiście jest to przesada dla tego, czego potrzebujesz, ale jeśli nic innego nie działa ... Czy myślisz, że to wyłącznie logger, który nie przekazuje tych informacji? –

+0

To zadziałało dla mnie – Paludis

1

Szczegółowy log, który chcesz wygenerować, jest generowany przez funkcję start_processing w log_subscriber.rb.

action_controller/log_subscriber.rb:

def start_processing(event) 
    payload = event.payload 
    params = payload[:params].except(*INTERNAL_PARAMS) 

    info " Processing by #{payload[:controller]}##{payload[:action]} as #{payload[:formats].first.to_s.upcase}" 
    info " Parameters: #{params.inspect}" unless params.empty? 
end 

Sprawdziłem z szynami 3.0.4 w rozwoju i środowiska produkcyjnego. W obu środowiskach mamy szczegółowe dzienniki.

To jest dziennik poziomu informacji. Dlatego poziom dziennika debugowania nie zmienia danych wyjściowych.

Zainstalowałem wtyczkę używaną przez heroku rails_log_stdout (Heroku logging), ale nadal mam żądane wyjście.

W tej chwili nie mogę przetestować Heroku, aby dowiedzieć się, dlaczego nie masz wszystkich dzienników.

W przykładzie heroku (patrz rejestrowanie Heroku, pobieranie logu sekcji) nie widzimy linii "Przetwarzanie" i "Parametry". Myślę, że ta metoda nie jest wywoływana, gdy aplikacja działa na heroku (jest w jakiś sposób wyłączona) lub heroku przeskakuje logi zaczynające się od białych znaków. Czy możesz spróbować zalogować wiadomości zaczynając od białych znaków i sprawdzić, czy wyświetla je heroku?

0

wygląda serwer puma nie dobrze bawić Heroku. W moim projekcie próbowałem wszystkiego, ale nadal nie logowałem. Potem zastąpiłem Pumę Unicornem, a bam, pokazane są pełne dzienniki.