Где находится RACK?
Я запускаю приложение sinatra через RACK.
В какой файл регистрируется активность? Также как я могу установить путь к файлу журнала?
Ответы
Ответ 1
По-разному. Многие разработчики определяют свой файл журнала приложения как app/servername.log или просто по текущему пути, куда загружается приложение Rack.
Да, вы можете изменить его путь.
Обычно вы получаете файл config.ru с чем-то вроде:
log = File.new("sinatra.log", "a+")
$stdout.reopen(log)
$stderr.reopen(log)
# optionally to sync logs while the server is running
$stderr.sync = true
$stdout.sync = true
и/или
configure do
LOGGER = Logger.new("sinatra.log")
enable :logging, :dump_errors
set :raise_errors, true
end
в этом случае файл журнала находится в appdir/sinatra.log. Но помните, что этот код может находиться в любом месте вашего приложения Rack, поэтому, пожалуйста, найдите "log" в каталоге вашего приложения.
$ cd projectname
$ grep -ri 'log' *
развлекайся и опубликуй здесь свой config.ru и/или mainprojectfile.rb.
Ответ 2
Строка LOGGER = Logger.new("sinatra.log")
в ответе @include выше у меня не работает.
Однако альтернатива, перечисленная здесь здесь (вместе с некоторыми полезными объяснениями), сработала для меня, протестирована с ruby 2.5.3 и sinatra 2.0.1.
Для дополнительной информации эта альтернатива основана на структуре, представленной в рецепте Синатры.
Ответ 3
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
И мы вернулись!