在开发模式下调试时我们多次使用 puts 语句,后来在代码转移到生产时错过了删除它们。删除它们有助于我们增加响应时间吗?我无法在本地测试这种情况,因为它们在服务器控制台中打印,但在生产中我确定它们没有在任何日志中打印。我也很好奇他们是否被执行然后输出指向生产的地方。有没有办法找出来?
答案 0 :(得分:5)
首先,不要在任何地方使用puts
。用单一方法瓶颈你的“调试”输出。通过这种方式,您可以非常轻松地控制输出,重定向,按摩它等。例如,这些可能是从简单的记录方法增长到更复杂的方法:
def debug_output(s)
STDERR.puts s
end
---
DEBUG_OUTPUT_MINIMUM_LEVEL = 3
def debug_output(s, level=DEBUG_OUTPUT_MINIMUM_LEVEL)
STDERR.puts s if level >= DEBUG_OUTPUT_MINIMUM_LEVEL
end
---
require 'logger'
LOGGER_OUTPUT_FILE = '/path/to/log/output'
def debug_output(s)
@logger ||= Logger.new(LOGGER_OUTPUT_FILE)
@logger << s
end
除了puts
之外,还有比{{1}}更好的工具。学习在调试模式下使用debugger或PRY和/或使用Ruby的内置Logger或Syslog,以便控制调试级别输出。
从历史上看,Ruby使用Syslog的文档非常缺乏。在Ruby v2.0中,它的 MUCH 得到了改进,并且现在已经有了很好的文档记录,所以如果你想要真正的功能,请查看Logger或Syslog和Syslog :: Logger。
这是来自Syslog的文档。如果您可以执行以下操作,请考虑对代码调试/日志记录的影响:
Syslog消息通常传递给中央日志记录守护程序。守护进程可以过滤它们;将它们路由到不同的文件(通常在/ var / log下找到);将它们放在SQL数据库中;通过TCP或UDP将它们转发到集中式日志服务器;甚至通过电子邮件,寻呼机或短信提醒系统管理员。
答案 1 :(得分:0)
确保puts
增加响应时间。真正的问题是多少。如果你打开一个控制台,那么它将花费很多时间。我通常使用emacs而不是控制台,只是在emacs shell模式下打印出来的东西有时需要很长时间。但无论额外的时间多少,你都不应该在不需要的时候将它们删除。
从长远来看,Tin Man建议的是正确的,但是如果你想要懒惰并做一个时间黑客,处理它的一种方法是覆盖puts
什么都不做。
def puts *_; end