Da dove viene RACK registro?
Domanda
Io sono in esecuzione di una sinatra app attraverso RACK.
A quale file fa attività registrate ?Inoltre, come posso impostare il percorso del file di log ?
Soluzione
Dipende. Molti sviluppatori definiscono il loro file di log app per app / servername.log o semplicemente per il percorso corrente in cui viene caricata l'applicazione Rack.
Sì, è possibile modificare il suo 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. Ma ricordate questo codice può essere ovunque nel rack app, quindi si prega di cercare per "log" nella directory dell'applicazione.
$ cd projectname $ grep -ri 'log' *
divertirsi e post qui il tuo config.ru e / o la mainprojectfile.rb.
Altri suggerimenti
La linea di LOGGER = Logger.new("sinatra.log")
in @include la risposta di sopra non ha funzionato per me.
Tuttavia, un'alternativa elencati qui (con alcune spiegazioni utili) funzionato per me, testato con rubino 2.5.3 e sinatra 2.0.1.
Per ulteriori info, che alternativa è basata sulla struttura presentati in un Sinatra ricetta.
Il object_id
sono inizialmente lo stesso, 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
Lo 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
flussi ancora al terminale qui,
>> STDERR.puts "Uh-oh, original STDERR"
Uh-oh, original STDERR
=> nil
Ripristina $stderr
,
>> $stderr = STDERR
=> #<IO:0x106fddb88>
>> $stderr.object_id == STDERR.object_id
=> true
E siamo di nuovo!