Вопрос

Я запускаю приложение 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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top