为何WEBrick日志出现/?IO.select是否会输出内容?
关于WEBrick日志中出现"/"的问题分析
嘿,我来帮你拆解这个问题:你想让WEBrick服务器静默运行,避免直接往日志文件写数据,于是在server.rb第98行加了这段代码:
puts "before" if svrs = IO.select(@listeners, nil, nil, 2.0) puts "after"
运行脚本后,日志却显示:
before / after
你疑惑这个"/"是来自其他线程,还是IO.select本身输出的?
首先可以明确:IO.select本身绝对不会向stdout输出任何字符,这个"/"肯定是其他线程的输出——具体来说就是WEBrick默认的访问日志输出。
WEBrick在处理客户端请求时,默认会记录请求的基本信息,比如当有请求访问服务器根路径时,它会输出类似GET / HTTP/1.1的日志内容,其中的"/"就是请求的路径。而你添加的puts语句和WEBrick的日志输出共用了同一个stdout,再加上线程调度的时序问题,两者的输出就混在了一起,才出现了"before / after"这种看起来连在一起的结果。
你可以做个简单验证:暂时关闭WEBrick的访问日志,或者把你的puts语句改成带明显分隔符的形式(比如puts "before====="),再运行脚本,就能看到输出不会再混在一起,也能彻底确认这个"/"的来源了。
内容的提问来源于stack exchange,提问作者Sancarn
相关产品推荐
相关产品推荐

