2010-05-17 18 views
15

Tôi có ứng dụng Rails nhưng sau một thời gian phát triển/gỡ lỗi, tôi nhận thấy rằng sẽ rất hữu ích khi có thể xem toàn bộ yêu cầu HTTP trong logfiles - log/development .log, không chỉ các tham số.Làm cách nào để xem toàn bộ yêu cầu HTTP trong Rails

Tôi cũng muốn có một tệp nhật ký riêng dựa trên người dùng chứ không phải phiên.

Mọi ý tưởng sẽ được đánh giá cao!

Thiên thần

Trả lời

33

Bạn có thể nhanh chóng thấy request.env trong một lần xem qua:

  • XEM: <% = request.env.inspect%>

Nếu thay vì bạn muốn đăng nhập vào nhật ký phát triển, từ trình điều khiển của bạn:

  • CONTROLLER: Rails.logger.info (request.env)

Ở đây bạn có thể thấy một reference cho đối tượng Request.

Rails tự động thiết lập đăng nhập vào một tệp trong nhật ký/thư mục bằng Logger từ Thư viện chuẩn của Ruby. Tệp nhật ký sẽ được đặt tên tương ứng với môi trường của bạn, ví dụ: log/development.log.

Để đăng nhập một tin nhắn từ một trong hai bộ điều khiển hoặc một mô hình, truy cập vào logger dụ Rails với phương pháp logger:

class YourController < ActionController::Base 
    def index 
    logger.info request.env 
    end 
end 

Về người sử dụng, những gì bạn đang sử dụng để xác thực It?

+0

Xin chào, cảm ơn bạn đã trả lời, nó thực sự hữu ích. Tôi đang sử dụng authlogic để xác thực. – akafazov

+0

... sau đó logger.info current_user.inspect sẽ là bạn của bạn;). – microspino

+0

Điều này trả về một chuỗi lớn unworkably mà tôi không thể tưởng tượng là những gì bất cứ ai đang tìm kiếm ... – tschwab

1

Bạn có thể sử dụng phần mềm trung gian giá để ghi lại các yêu cầu khi phần mềm trung gian nhìn thấy chúng (như được phân tích bởi máy chủ http và được chuyển đổi bởi phần mềm trung gian trước đó). Bạn cũng có thể định cấu hình máy chủ http của mình để ghi lại các yêu cầu đầy đủ, nếu máy chủ http của bạn hỗ trợ tính năng này.

Máy chủ http (web-server) chịu trách nhiệm nhận các yêu cầu http, phân tích cú pháp và truyền cấu trúc dữ liệu đến máy chủ ứng dụng (ví dụ: ứng dụng giá). Ứng dụng-máy chủ không nhìn thấy yêu cầu ban đầu, nhưng nhìn thấy những gì máy chủ http gửi theo cách của nó.

+0

Cảm ơn một bản ghi, mẹo tuyệt vời. – akafazov

3

logger.info request.env hoạt động tốt trong bộ điều khiển Rails, nhưng để xem phiên bản gốc hơn hoặc nếu bạn đang sử dụng Grape hoặc một số ứng dụng được gắn kết khác, bạn phải chặn yêu cầu trên đường đi chuỗi ...

Đặt mã này trong thư mục lib của bạn (hoặc ở dưới cùng của application.rb):

require 'pp' 
class Loggo 
    def initialize(app) 
    @app = app 
    end 
    def call(env) 
    pp env 
    @app.call(env) 
    end 
end 

sau đó với các config s khác trong application.rb:

config.middleware.use "Loggo" 
+0

Bên cạnh: Đầu ra của pp đi đâu trong sơ đồ trung gian này? – ericpeters0n

+1

Đầu ra đi tới $ stdout, vì vậy trong trường hợp thông thường bạn sẽ thấy nó trong giao diện điều khiển nơi máy chủ đường ray bắt đầu – BitOfUniverse

0

Tôi đã sử dụng đoạn mã ban đầu bởi @AlexChaffee, nhưng tôi đã chuyển sang sử dụng mitmproxy, một proxy HTTP chuyên biệt ghi lại các yêu cầu và phản hồi đi qua nó.

Điều này rõ ràng chỉ hữu ích cho các tình huống phát triển khi bạn kiểm soát các ứng dụng tạo yêu cầu. Bạn có thể đạt được kết quả tương tự với proxy ngược cho các ứng dụng sản xuất (lợi thế là bạn không phải tự chạm vào ứng dụng Rails), nhưng tôi chưa xem xét điều này.

Các vấn đề liên quan