2012-08-16 7 views
23

Wie kann ich verhindern, dass Rails zu viel protokolliert? Hier ist ein typischer Trace in meiner production.log-Datei, viele Partials, Cache-Hits ... Es ist nützlich in der Entwicklung, aber ich will es nicht in meiner Produktionsumgebung.Rails Protokoll zu ausführlich

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) 

Dankten für Ihre Hilfe

PS: Ich bin mit Rails 3.2.6

+1

Verwenden Sie ** [Lograge] (https://github.com/roidrage/lograge) **, am besten Juwel, den ich zum Bereinigen gefunden habe Rails Logging – Yarin

Antwort

30

In Rails 4 gibt es eine Einstellung sein Protokolle aufzuräumen:

config.action_view.logger = nil 

dass 3 in Rails Um das zu erreichen, müssen Sie Affe Patch ActionView:

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

FWIW, dieses Monkey-Patch offenbar eine Datei-Handle protokolliert Leck (zumindest mit Rails 3.2.12). Ich empfehle, 'Logger.new ('/ dev/null')' durch '@memoized_logger || = Logger.new ('/ dev/null')' zu ersetzen. Bittere Stimme der Erfahrung hier. :) – bheeshmar

+1

Danke für den Bericht. Ich habe meine Antwort bearbeitet. – sailor

+1

Um die Partial-Protokollierung aktiviert zu lassen, wenn die Protokollierungsstufe Debugging ist, können Sie '@memoized_logger || = Rails.logger.debug verwenden? ? super: Logger.new ('/ dev/null') ' – robd

6

Sie benötigen config.log_level anders einzustellen. Erfahren Sie mehr über Log Levels.

Fügen Sie zum Beispiel die folgenden config/evironments/production.rb

config.log_level = :warn 

Ihr wahrscheinlich :debug oder :info gesetzt.

+5

Das Problem ist, wenn der Log-Level auf warnen gesetzt ist, bekomme ich gar nichts in meiner Log-Datei. Ich will, dass die grundlegenden Informationen wie "Verarbeitung von HomeController # index als HTML" oder "Abgeschlossen 200 OK in 369ms (Ansichten: 272.3ms | ActiveRecord: 8.1ms)" – sailor

3

ich dieses in meinem Initializers zu Monkeypatch bestimmte Logging zu debuggen gehen anstelle von Info:

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 
Verwandte Themen