0

私は Rails の初心者ですが、Rails プロジェクトで問題が発生しました。ロガーには Log4r を使用しました。Rails 3.0.xでLog4rを構成する方法でLog4rの構成も使用しましたか? . しかし、同時にいくつかのリクエストを送信すると、Log4r の出力にエラーが発生します。順不同です。:(

エラー出力ログファイルの例:

Started GET "/task_results.json" for 172.29.73.182 at 2013-06-17 17:36:38 +0700
Processing by TaskResultsController#index as JSON

Started GET "/favicon.ico" for 172.29.73.182 at 2013-06-17 17:36:38 +0700
Processing by ApplicationController#missing_page as 
  Parameters: {"path"=>"favicon"}
Completed 404 Not Found in 1ms (Views: 0.2ms | ActiveRecord: 0.0ms)
  [1m [36m (994.0ms) [0m   [1mSELECT task_result_id,task_id,worker_id,product_id,passed,date_time,details FROM task_results ORDER BY task_result_id DESC; [0m
Completed 200 OK in 8656ms (Views: 0.2ms | ActiveRecord: 994.0ms)

出力を同期するように Log4r を設定するにはどうすればよいですか? または、どうすれば問題を解決できますか?

4

1 に答える 1

1

ruby はシングル スレッドなので、unicorn のようなサーバーで Rails アプリを実行していると思いますか?

私が考えることができる唯一の解決策は、タイムスタンプ (マイクロ秒) と、開発環境での単一の要求以外には適していない複数行の Rails ログ出力を使用しないことです。ただし、これでも「順序付けられた」ログは保証されません。これは、リクエストが処理されたとき、またはその後バッファが再度フラッシュされたときにランダムに書き込まれる可能性があるためです。

これは、Log4r の使用方法に関する詳細なチュートリアルであり、ログにカスタム タイムスタンプを取得し、すべての重要な情報を 1 行で表示する方法も示しています。これにより、他のリクエストからのログがメインのリクエスト内に書き込まれるのを防ぎ、タイムスタンプをマイクロ秒単位で解決して、後で手動で注文することができます。ただし、並行アプリサーバーを実行している場合、順序は保証されないため、順序は重要ではありません。

于 2013-12-01T09:43:07.007 に答える