2010-05-17 7 views
15

레일 애플리케이션을 사용하고 있지만 개발/디버깅 후 로그 파일에서 전체 HTTP 요청을 볼 수있는 것이 매우 유용하다는 것을 깨달았습니다. .log뿐 아니라 매개 변수.레일에서 전체 HTTP 요청을 보는 방법

또한 세션이 아닌 사용자별로 별도의 로그 파일을 만들고 싶습니다.

어떤 아이디어라도 환영합니다!

당신은 신속 통해보기에서 request.env을 볼 수 있습니다

답변

33

천사 :

  • VIEW : <퍼센트 = request.env.inspect %의 대신>

하는 경우 당신은 컨트롤러에서 개발 로그에 로그인하려고합니다 :

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

당신은 Request 객체에 대한 reference을 볼 수 있습니다.

Rails는 Ruby 표준 라이브러리의 Logger를 사용하여 log/디렉토리에있는 파일에 자동으로 로깅을 설정합니다. 로그 파일의 이름은 사용자 환경에 따라 지정됩니다. log/development.log. 당신이 그것을 인증하는 데 사용하고,

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

를 사용자 정보 :

는 로거 방법으로 레일 로거 인스턴스에 액세스, 컨트롤러 또는 모델 중 하나에서 메시지를 기록하려면?

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 나는 인증을 위해 authlogic을 사용하고있다. – akafazov

+0

... 그러면 logger.info current_user.inspect는 친구가됩니다;). – microspino

+0

이것은 내가 상상할 수없는 커다란 문자열을 돌려줍니다. – tschwab

1

미들웨어가 요청할 때 랙 미들웨어를 사용하여 요청을 기록 할 수 있습니다 (http- 서버로 구문 분석되고 선행 미들웨어로 변환 됨). http-server가 이러한 기능을 지원할 경우 전체 요청을 기록하도록 http-server를 구성 할 수도 있습니다.

http-server (웹 서버)는 http 요청을 받고, 구문 분석하고, 응용 프로그램 서버 (예 : 랙 응용 프로그램)로 데이터 구조를 전송합니다. 응용 프로그램 서버는 원래 요청을 보지 못하지만 http 서버가 보내는 요청을 보게됩니다.

+0

감사의 말, 훌륭한 팁. – akafazov

3

logger.info request.env 코드는 Rails 컨트롤러에서 정상적으로 작동하지만 더 오래된 버전을 보거나 Grape 또는 다른 탑재 된 앱을 사용하는 경우 랙 미들웨어를 통해 요청을 가로 채야합니다 application.rb의 다른 config의에 다음

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

: 체인 ...

은 ( application.rb의 하단 또는)이 lib 디렉토리에이 코드를 넣어

config.middleware.use "Loggo" 
+0

다음 : pp의 출력은이 미들웨어 체계에서 어디에 있습니까? – ericpeters0n

+1

출력은 $ stdout으로 간다. 그래서 보통은 레일 서버가 시작된 콘솔에서 볼 수있다. – BitOfUniverse

0

처음에는 @AlexChaffee에 의해 코드 스 니펫을 사용했지만 이후에는 요청과 응답을 기록하는 특수 HTTP 프록시 인 mitmproxy을 사용하여 전환했습니다.

이것은 분명히 요청을하는 응용 프로그램을 제어 할 때 개발 시나리오에서만 유용합니다. 프로덕션 애플리케이션을위한 역방향 프록시를 사용하여 유사한 결과를 얻을 수도 있습니다 (이 경우 Rails 애플리케이션 자체를 만질 필요가 없다는 장점이 있습니다).

관련 문제