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
$stderr
和STDERR
引用不同的对象。 STDERR
仍在这里流到终端,
>> STDERR.puts "Uh-oh, original STDERR" Uh-oh, original STDERR => nil
恢复$stderr
,
>> $stderr = STDERR => # >> $stderr.object_id == STDERR.object_id => true
我们回来了!