2012-08-16 8 views
23

どのようにしてRailsがログを記録するのを防ぐことができますか?ここに私のproduction.logファイル、多くの部分、キャッシュヒットの典型的なトレースがあります...それは開発には便利ですが、私はそれを私の生産環境では望んでいません。あなたの助けのためのRailsのログが冗長すぎる

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) 

感謝のを

PS:私はRailsのあなたが異なっあなたconfig.log_levelを設定する必要があります3.2.6

+1

使用** [Lograge](https://github.com/roidrage/lograge)**、最高gem私はRailsのログを掃除するために見つけた – Yarin

答えて

30

代わりに、情報のデバッグに行くために、特定のログをモンキーパッチする初期化子:

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 
+7

FWIW、このモンキーパッチは明らかにファイルハンドルリーク(少なくともRails 3.2.12では)。 'Logger.new( '/ dev/null')を' @memoized_logger || = Logger.new( '/ dev/null') 'に置き換えることをお勧めします。ここでの経験の苦い声。 :) – bheeshmar

+1

ありがとうございました。私は私の答えを編集しました。 – sailor

+1

ログレベルがデバッグのときに部分ログを有効にするには、 '@memoized_logger || = Rails.logger.debug? ? super:Logger.new( '/ dev/null') ' – robd

6

を使用しています。 Log Levelsについて学んでください。

は例えば、:debugまたは:infoconfig/evironments/production.rb

config.log_level = :warn 

ユアーズ可能性が設定されているに以下を追加します。レール3に、あなたは猿のパッチActionViewに持っていることを達成するために

config.action_view.logger = nil 

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

問題は、ログレベルが警告に設定されているときに、私のログファイルに何も得られないということです。私は基本情報を "HomeController#index by HTMLとして処理"や "369msで200 OKを完了(Views:272.3ms | ActiveRecord:8.1ms)"のように記録したいとします。 – sailor

3

私は私でこれを入れてログをクリーンアップするための設定があるでしょうRailsの4では