RACK在哪里登录?

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

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

这取决于。 许多开发人员将他们的应用程序日志文件定义到app / servername.log或仅定义到加载Rack应用程序的当前路径。

是的,你可以改变它的路径。

通常你会得到一个config.ru文件,例如:

   log = File.new(“sinatra.log”,“a +”)
   $ stdout.reopen(日志)
   $ stderr.reopen(日志)

和/或

配置做
   LOGGER = Logger.new(“sinatra.log”)
   enable:logging,:dump_errors
   set:raise_errors,true
结束

在这种情况下,日志文件位于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进行测试。

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

object_id最初是相同的,但最好分配给$stderr 。 这也让你打开将流返回到最初使用STDERR

  $ irb >> $stderr.object_id == STDERR.object_id => true 

同样的目标,现在。 发送到别处,

 >> $stderr = File.open('/tmp/foo', 'w') => # >> $stderr.puts "Uh-oh, foo" => nil >> $stderr.flush # if you want to verify its output => # >> $stderr.object_id == STDERR.object_id => false 

$stderrSTDERR引用不同的对象。 STDERR仍在这里流到终端,

 >> STDERR.puts "Uh-oh, original STDERR" Uh-oh, original STDERR => nil 

恢复$stderr

 >> $stderr = STDERR => # >> $stderr.object_id == STDERR.object_id => true 

我们回来了!