将陈述投入生产

时间:2013-06-27 17:39:57

标签: ruby-on-rails ruby

在开发模式下调试时我们多次使用 puts 语句,后来在代码转移到生产时错过了删除它们。删除它们有助于我们增加响应时间吗?我无法在本地测试这种情况,因为它们在服务器控制台中打印,但在生产中我确定它们没有在任何日志中打印。我也很好奇他们是否被执行然后输出指向生产的地方。有没有办法找出来?

2 个答案:

答案 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}}更好的工具。学习在调试模式下使用debuggerPRY和/或使用Ruby的内置LoggerSyslog,以便控制调试级别输出。

从历史上看,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