Para onde o rack está logando?
Pergunta
Estou executando um aplicativo Sinatra através do rack.
Para qual arquivo a atividade é registrada? Além disso, como posso definir o caminho do arquivo de log?
Solução
Depende. Muitos desenvolvedores definem seu arquivo de log de aplicativos para app/servername.log ou apenas para o caminho atual em que o aplicativo rack é carregado.
Sim, você pode mudar seu caminho.
Normalmente você recebe um arquivo config.ru com algo como:
log = File.new("sinatra.log", "a+") $stdout.reopen(log) $stderr.reopen(log)
e/ou
configure do LOGGER = Logger.new("sinatra.log") enable :logging, :dump_errors set :raise_errors, true end
Nesse caso, o arquivo de log está localizado em appdir/sinatra.log. Mas lembre -se de que esse código pode estar em qualquer lugar do aplicativo do seu rack; portanto, procure "log" no diretório de aplicativos.
$ cd projectname $ grep -ri 'log' *
Divirta -se e poste aqui seu config.ru e/ou o mainprojectfile.rb.
Outras dicas
A linha de LOGGER = Logger.new("sinatra.log")
dentro @Incluir a resposta acima não funcionou para mim.
No entanto, uma alternativa listada aqui (Junto com algumas explicações úteis) trabalhou para mim, testado com o Ruby 2.5.3 e o Sinatra 2.0.1.
Para informações adicionais, essa alternativa é baseada na estrutura apresentada em um Receita de Sinatra.
o object_id
são inicialmente os mesmos, mas é melhor atribuir a $stderr
. Isso também deixa você aberto para devolver o fluxo para onde estava originalmente com STDERR
:
$ irb
>> $stderr.object_id == STDERR.object_id
=> true
O mesmo objeto, por enquanto. Envie para outro lugar,
>> $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
consulte diferentes objetos. STDERR
ainda flui para o terminal aqui,
>> STDERR.puts "Uh-oh, original STDERR"
Uh-oh, original STDERR
=> nil
Restaurar $stderr
,
>> $stderr = STDERR
=> #<IO:0x106fddb88>
>> $stderr.object_id == STDERR.object_id
=> true
E estamos de volta!