2012-08-16 11 views
23

Jak mogę zapobiec logowaniu Railsów za dużo? Oto typowy ślad w moim pliku production.log, wiele częściowych, trafień w pamięci podręcznej ... Jest to użyteczne w rozwoju, ale nie chcę tego w moim środowisku produkcyjnym.Log Railsy zbyt szczegółowe

Started GET "/?redirected=true" for 46.193.131.53 at 2012-08-16 18:39:20 +0200 
Processing by HomeController#index as HTML 
    Parameters: {"redirected"=>"true"} 
    Rendered application/_successfully_connected.html.haml (0.8ms) 
    Rendered hotspot_infos/_infos.html.haml (0.4ms) 
    Rendered application/_hotspot_infos.html.haml (1.8ms) 
    Rendered application/_news.html.haml (0.3ms) 
Read fragment views/social-zone-341-directory (0.5ms) 
    Rendered application/_directory.html.haml (2.5ms) 
    Rendered application/_meteo.html.haml (1.1ms) 
    Rendered application/_notifications.html.haml (0.8ms) 
    Rendered application/_like_button.html.haml (0.3ms) 
    Rendered application/_navbar.html.haml (4.2ms) 
    Rendered application/_connection.html.haml (0.5ms) 
    Rendered application/_gallery.html.haml (0.2ms) 
    Rendered application/_search_bar.html.haml (0.4ms) 
    Rendered pictures/_picture_frame.html.haml (0.3ms) 
    Rendered application/_profile_preview.html.haml (1.4ms) 
    Rendered application/_profile_block.html.haml (1.7ms) 
    Rendered application/_menus.html.haml (3.3ms) 
    Rendered application/_left_pane.html.haml (5.5ms) 
    Rendered application/_langs.html.haml (0.8ms) 
    Rendered application/_footer.html.haml (1.9ms) 
    Rendered application/_flash_modal.html.haml (0.1ms) 
    Rendered application/_connection_required.js.erb (0.2ms) 
Completed 200 OK in 159ms (Views: 25.5ms | ActiveRecord: 88.0ms) 

Dziękuję za waszą pomoc

PS: Używam Rails 3.2.6

+1

Użyj ** [Lograge] (https://github.com/roidrage/lograge) **, najlepiej gem, który znalazłem do czyszczenia logów Railsowych – Yarin

Odpowiedz

30

W Rails 4 będzie ustawienie oczyścić dzienniki:

config.action_view.logger = nil 

Aby to osiągnąć w Rails 3, trzeba małpa plastra actionView:

module ActionView 
    class LogSubscriber < ActiveSupport::LogSubscriber 
    def logger 
     @memoized_logger ||= Logger.new('/dev/null') 
    end 
    end 
end 
+7

FWIW, ta łata małpy najwyraźniej powoduje uchwycenie pliku wyciek (przynajmniej z Railsami 3.2.12). Polecam zastąpienie 'Logger.new ('/ dev/null')' z '@memoized_logger || = Logger.new ('/ dev/null')'. Gorzki głos doświadczenia tutaj. :) – bheeshmar

+1

Dziękuję za raport. Edytowałem swoją odpowiedź. – sailor

+1

Aby włączyć logowanie częściowe, gdy poziom dziennika jest debugowany, możesz użyć '@memoized_logger || = Rails.logger.debug? ? super: Logger.new ('/ dev/null') ' – robd

6

Musisz ustawić config.log_level inaczej. Dowiedz się więcej o Log Levels.

Na przykład dodać następujące config/evironments/production.rb

config.log_level = :warn 

Yours jest prawdopodobnie ustawiony na :debug lub :info.

+5

Problem polega na tym, że poziom dziennika ustawiony jest na ostrzeżenie, w pliku logu nic nie dostaję. Chcę, aby podstawowe informacje były rejestrowane, jak "Przetwarzanie przez indeks HomeController # jako HTML" lub "Ukończono 200 OK w 369ms (Widoki: 272,3ms | ActiveRecord: 8.1ms)" – sailor

3

kładę to w moim inicjalizatory do monkeypatch niektóre logowania, aby przejść do debugowania zamiast informacji:

module ActionView 
    class LogSubscriber 
    def render_template(event) 
     message = "Rendered #{from_rails_root(event.payload[:identifier])}" 
     message << " within #{from_rails_root(event.payload[:layout])}" if event.payload[:layout] 
     message << " (#{event.duration.round(1)}ms)" 
     debug(message) 
    end 
    alias :render_partial :render_template 
    alias :render_collection :render_template 
    end 
end 

module ActionController 
    class LogSubscriber 
    # Use debug logging for read_fragment 
    # %w(write_fragment read_fragment exist_fragment? expire_fragment expire_page write_page).each do |method| 
    %w(read_fragment).each do |method| 
     class_eval <<-METHOD, __FILE__, __LINE__ + 1 
     def #{method}(event) 
      return unless logger.info? 
      key_or_path = event.payload[:key] || event.payload[:path] 
      human_name = #{method.to_s.humanize.inspect} 
      debug("\#{human_name} \#{key_or_path} (\#{event.duration.round(1)}ms)") 
     end 
     METHOD 
    end 
    end 
end