RACK を介してシナトラ アプリを実行しています。
アクティビティはどのファイルに記録されますか? また、ログファイルのパスを設定するにはどうすればよいですか?
場合によります。多くの開発者は、アプリのログ ファイルを 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 をここに投稿して楽しんでください。
上記の@includeの回答の行はLOGGER = Logger.new("sinatra.log")
うまくいきませんでした。
ただし、ここにリストされている代替手段(いくつかの役立つ説明とともに) が機能し、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
そして、私たちは戻ってきました!