2010-03-02 18 views
14

Estoy ejecutando una aplicación de sinatra a través de RACK.¿A dónde se conecta RACK?

¿A qué archivo se registra la actividad? Además, ¿cómo puedo establecer la ruta del archivo de registro?

Respuesta

15

Depende. Muchos desarrolladores definen su archivo de registro de aplicación en la aplicación/servername.log o simplemente en la ruta actual donde se carga la aplicación Rack.

Sí, puede cambiar su ruta.

Por lo general, aparece un archivo config.ru con algo como:

 
    log = File.new("sinatra.log", "a+") 
    $stdout.reopen(log) 
    $stderr.reopen(log) 

y/o

 
configure do 
    LOGGER = Logger.new("sinatra.log") 
    enable :logging, :dump_errors 
    set :raise_errors, true 
end 

en este caso, el archivo de registro se encuentra bajo appdir/sinatra.log. Pero recuerde que este código puede estar en cualquier lugar de su aplicación Rack, así que busque "log" en su directorio de aplicaciones.

 
$ cd projectname 
$ grep -ri 'log' * 

divertirse y publicar aquí su config.ru y/o el archivo principalproyecto.rb.

+0

Hola Francisco. Sí, esto funcionó perfecto para mí. log_path = "" LOGGER = Logger.new (log_path, "continuo") log = File.new (log_path, "a +") STDOUT.reopen (log) STDERR .reopen (log) –

+0

@include: ¿Hay alguna forma de que pueda hacer que los entornos de producción y desarrollo se registren en los archivos, pero que realicen un registro de prueba en la terminal? Parece que cuando vuelvo a abrir '$ stdout' y' $ stderr', también redirige la salida de prueba a los archivos. –

+1

La reapertura de STDOUT puede hacer que Passenger no se inicie: https://github.com/phusion/passenger/wiki/Debugging-application-startup-problems – fguillen

-2

Los object_id son inicialmente iguales pero es mejor asignarlos a $stderr. Eso también te deja abierto para devolver la corriente a donde estaba originalmente con STDERR:

$ irb 
>> $stderr.object_id == STDERR.object_id 
=> true 

mismo objeto, por ahora. Enviarlo a otra parte,

>> $stderr = File.open('/tmp/foo', 'w') 
=> #<File:/tmp/foo> 
>> $stderr.puts "Uh-oh, foo" 
=> nil 
>> $stderr.flush # if you want to verify its output 
=> #<File:/tmp/foo> 
>> $stderr.object_id == STDERR.object_id 
=> false 

$stderr y STDERR se refieren a diferentes objetos. STDERR todavía arroyos al terminal aquí,

>> STDERR.puts "Uh-oh, original STDERR" 
Uh-oh, original STDERR 
=> nil 

Restaurar $stderr,

>> $stderr = STDERR 
=> #<IO:0x106fddb88> 
>> $stderr.object_id == STDERR.object_id 
=> true 

Y estamos de vuelta!

Cuestiones relacionadas