2010-03-02 15 views
14

Sto eseguendo un'applicazione sinatra tramite RACK.Dove si collega RACK?

A quale file viene registrata l'attività? Inoltre, come posso impostare il percorso del file di registro?

risposta

15

Dipende. Molti sviluppatori definiscono il loro file di registro app su app/servername.log o solo sul percorso corrente in cui viene caricata l'app Rack.

Sì, è possibile modificare il percorso.

Di solito si ottiene un file config.ru con qualcosa di simile:

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

e/o

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

in questo caso il file di log si trova sotto appdir/sinatra.log. Ricorda però che questo codice può essere ovunque nell'app Rack, quindi cerca "log" nella directory dell'applicazione.

 
$ cd projectname 
$ grep -ri 'log' * 

divertirsi e post qui il tuo config.ru e/o la mainprojectfile.rb.

+0

Ciao Francisco. Sì, questo ha funzionato perfettamente per me. log_path = "" LOGGER = Logger.new (log_path, "quotidiano") log = File.new (log_path, "A +") STDOUT.reopen (log) STDERR .reopen (log) –

+0

@include: c'è un modo per far sì che gli ambienti di produzione e di sviluppo si colleghino ai file, ma crei un log di test sul terminale? Sembra che quando riapuro '$ stdout' e' $ stderr', reindirizza anche l'output di test ai file. –

+1

La riapertura di STDOUT può impedire a Passenger di avviarsi: https://github.com/phusion/passenger/wiki/Debugging-application-startup-problems – fguillen

-2

Il object_id inizialmente sono gli stessi ma è meglio assegnare a $stderr. Che lascia anche si apre per riportare il flusso a dove era in origine con STDERR:

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

Stesso oggetto, per ora. Invia altrove,

>> $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 e STDERR si riferiscono a oggetti diversi. STDERR torrenti ancora al terminale qui,

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

Restore $stderr,

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

E siamo tornati!