15

私は通常、何が起こっているのかをあまり理解せずに何かを行う方法を直接尋ねるのは好きではありませんが、私はレールにかなり慣れていないため、これを達成するのに苦労しています.

基本的に、リクエストごとに次の情報を 1 つのログ ステートメントにキャプチャする必要があります (可能な場合)。

  • ログエントリの日付
  • ログエントリの時間
  • HTTP メソッド
  • 要求された URL
  • ポート
  • リクエスタの IP アドレス
  • リクエスタのユーザー エージェント
  • 参照 URL
  • HTTP 応答コード
  • ホスト名

    ログ形式をカスタマイズするための推奨される方法は何ですか? 既存のログを変更して、この情報を渡すことは可能ですか? または、必要な動作を拡張して上書きする必要がありますか?

    これを別のログ ファイルなどに保存する必要はありません。リクエストごとに STDOUT に出力するだけです。

    これについての助けをいただければ幸いです。

    ありがとう!

  • 4

    2 に答える 2

    14

    これは古い質問であることは承知していますが、これに出くわした将来の人々にとって、Rails 3.2+ で推奨されるアプローチは ActiveSupport::TaggedLogging を使用することだと思います。これを紹介するブログ記事はこちら

    また、サブドメイン、リクエストごとの UUID、およびユーザー エージェントを各ログ メッセージに追加する簡単な例を示します。これを環境初期化ファイルに入れることができます。

    config.log_tags = [ :subdomain, :uuid, lambda { |request| request.user_agent } ]
    
    于 2013-05-08T06:30:40.543 に答える
    11

    あなたが要求した情報のほとんどは、すべてではないにしても、要求ヘッダーと応答で見つけることができると思います。それをログに追加する方法に関する情報は以前に回答されていますが、基本的には ApplicationController でaround_filterを使用して、要求ヘッダーから関心のある情報をログに記録できます。たとえば、リクエストからユーザー エージェントをログに記録し、レスポンスからステータス コードをログに記録する方法は次のとおりです。

    class ApplicationController < ActionController::Base 
      around_filter :global_request_logging
    
      def global_request_logging 
        logger.info "USERAGENT: #{request.headers['HTTP_USER_AGENT']}"
        begin 
          yield 
        ensure 
          logger.info "response_status: #{response.status}"
        end 
      end 
    end
    

    必要な形式を取得する限り、呼び出しをラップすると、必要な形式を出力できます。また、Rails ロガーも非常にカスタマイズ可能であり、デフォルトのログ記録を置き換える必要がある場合や、有用な形式を作成する方法のヒントとなるプロジェクトがいくつか既に存在します。

    • lograge - デフォルトの Rails ロギングを単一行のキー値出力に置き換えますが、まだリクエスト パラメータは実行していません
    • scrolls - より一般的なコンテキスト、キー値
    于 2012-07-04T05:57:30.197 に答える