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?

Foi útil?

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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top