14

我正在通过 RACK 运行一个 sinatra 应用程序。

活动记录到哪个文件?另外如何设置日志文件路径?

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 应用程序中的任何位置,因此请在您的应用程序目录中查找“日志”。

    $ cd projectname
    $ grep -ri 'log' *

玩得开心并在此处发布您的 config.ru 和/或 mainprojectfile.rb。

于 2010-03-02T23:48:56.130 回答
1

上面@include's answerLOGGER = Logger.new("sinatra.log")中的那一行对我不起作用。

但是,此处列出的替代方法(以及一些有用的解释)对我有用,并使用 ruby​​ 2.5.3 和 sinatra 2.0.1 进行了测试。

有关其他信息,该替代方案基于Sinatra 配方中提供的结构。

于 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

$stderrSTDERR引用不同的对象。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 回答