2010-05-17 8 views
15

Tengo una aplicación Rails pero después de un tiempo de desarrollo/depuración me di cuenta de que sería muy útil poder ver toda la solicitud HTTP en los archivos de registro - log/development .log, no solo los parámetros.¿Cómo veo la solicitud HTTP completa en Rails

También quiero tener un archivo de registro independiente basado en el usuario, no en la sesión.

¡Cualquier idea será apreciada!

Ángel

Respuesta

33

Se puede ver rápidamente el request.env en una vista a través de:

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

Si en lugar de desea iniciar sesión en el registro de desarrollo, desde su controlador:

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

Aquí se puede ver una reference para la solicitud objeto.

Rails configura automáticamente el registro en un archivo en el registro/directorio usando Logger desde Ruby Standard Library. El archivo de registro se denominará correspondiente a su entorno, p. log/development.log.

Para registrar un mensaje desde un controlador o un modelo, acceder a la instancia registrador de rieles con el método registrador:

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

sobre el usuario, lo que se está utilizando para autenticar Es?

+0

Hola, gracias por la respuesta, realmente ayuda. Estoy usando authlogic para la autenticación. – akafazov

+0

... luego logger.info current_user.inspect sería tu amigo;). – microspino

+0

Esto devuelve una cadena grande que no puedo imaginar es lo que está buscando ... – tschwab

1

Puede usar el middleware de rack para registrar las solicitudes a medida que las ve el middleware (analizado por el servidor http y transformado por el middleware anterior). También puede configurar su servidor http para registrar solicitudes completas, si su servidor http es compatible con dicha función.

El servidor http (servidor web) es responsable de recibir solicitudes http, analizarlas y transmitir estructuras de datos al servidor de aplicaciones (por ejemplo, una aplicación de bastidor). El servidor de aplicaciones no ve la solicitud original, pero ve lo que envía el servidor http a su manera.

+0

Gracias a un registro, gran consejo. – akafazov

3

El código logger.info request.env funciona bien en un controlador Rails, pero para ver una versión más original de eso, o si está utilizando Grape o alguna otra aplicación montada, tiene que interceptar la solicitud en su camino a través del middleware de rack cadena ...

poner este código en el directorio lib (o en la parte inferior de application.rb):

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

a continuación con los otros config s en application.rb:

config.middleware.use "Loggo" 
+0

Aparte: ¿A dónde va la salida de pp en este esquema de middleware? – ericpeters0n

+1

La salida va a $ stdout, por lo que en el caso habitual la verá en la consola donde comenzó el servidor de rails – BitOfUniverse

0

Inicialmente utilicé el fragmento de código de @AlexChaffee, pero desde entonces he pasado al uso de mitmproxy, un proxy HTTP especializado que registra las solicitudes y respuestas que pasan por él.

Esto obviamente solo es útil para escenarios de desarrollo cuando se controlan las aplicaciones que realizan las solicitudes. Es posible que pueda obtener resultados similares con un proxy inverso para aplicaciones de producción (la ventaja es que no tiene que tocar la aplicación Rails para esto), pero no he investigado esto.

Cuestiones relacionadas