14

RACK を介してシナトラ アプリを実行しています。

アクティビティはどのファイルに記録されますか? また、ログファイルのパスを設定するにはどうすればよいですか?

4

3 に答える 3

17

場合によります。多くの開発者は、アプリのログ ファイルを 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 をここに投稿して楽しんでください。

于 2010-03-02T23:48:56.130 に答える
1

上記の@includeの回答の行はLOGGER = Logger.new("sinatra.log")うまくいきませんでした。

ただし、ここにリストされている代替手段(いくつかの役立つ説明とともに) が機能し、ruby 2.5.3 および sinatra 2.0.1 でテストされました。

追加情報については、その代替案は、シナトラのレシピで提示された構造に基づいています。

于 2018-11-07T11:38:51.743 に答える
-2

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

そして、私たちは戻ってきました!

于 2012-03-02T19:23:23.507 に答える