Куда RACK регистрируется?
Вопрос
Я запускаю приложение Sinatra через RACK.
В какой файл записывается активность?И как мне установить путь к файлу журнала?
Решение
Это зависит.Многие разработчики определяют файл журнала своего приложения как app/servername.log или просто текущий путь, по которому загружается приложение Rack.
Да, вы можете изменить его путь.
Обычно вы получаете файл config.ru примерно такого содержания:
log = File.new("sinatra.log", "a+") $stdout.reopen(log) $stderr.reopen(log)
и/или
configure do LOGGER = Logger.new("sinatra.log") enable :logging, :dump_errors set :raise_errors, true end
в этом случае файл журнала находится в каталоге appdir/sinatra.log.Но помните, что этот код может находиться где угодно в вашем приложении Rack, поэтому найдите «журнал» в каталоге вашего приложения.
$ cd projectname $ grep -ri 'log' *
получайте удовольствие и размещайте здесь свой config.ru и/или mainprojectfile.rb.
Другие советы
Линия LOGGER = Logger.new("sinatra.log")
в Ответ @include выше у меня не сработало.
Однако альтернатива указана здесь (вместе с некоторыми полезными объяснениями) у меня сработало, проверено на Ruby 2.5.3 и Sinatra 2.0.1.
Для получения дополнительной информации эта альтернатива основана на структуре, представленной в Рецепт Синатры.
А object_id
изначально одинаковы, но лучше назначить $stderr
.Это также дает вам возможность вернуть поток туда, где он был изначально, с помощью STDERR
:
$ irb
>> $stderr.object_id == STDERR.object_id
=> true
Тот же объект, на данный момент.Отправьте его в другое место,
>> $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
и STDERR
обращаться к разным объектам. STDERR
все еще транслируется на терминал здесь,
>> STDERR.puts "Uh-oh, original STDERR"
Uh-oh, original STDERR
=> nil
Восстановить $stderr
,
>> $stderr = STDERR
=> #<IO:0x106fddb88>
>> $stderr.object_id == STDERR.object_id
=> true
И мы вернулись!