Где находится 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

И мы вернулись!