3

很多时候,在开发模式下进行调试时,我们密集地使用puts语句,然后在代码转移到生产环境时将其删除。删除它们是否有助于我们增加响应时间?我无法在本地测试这种场景,因为它们会打印在服务器控制台中,但在生产中,我确信它们不会打印在任何日志中。我也很好奇它们是否被执行,那么生产中的输出在哪里。有没有办法找出来?

4

2 回答 2

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。学习在调试模式下使用调试器PRY和/或使用 Ruby 的内置LoggerSyslog,以便您可以控制调试级别的输出。

从历史上看,Ruby 使用 Syslog 的文档非常……缺乏。在 Ruby v2.0 中,它得到了很大的改进,并且现在记录得很好,所以如果你想要真正的力量,请查看 Logger 或 Syslog 和 Syslog::Logger。

这是来自 Syslog 的文档。如果您可以执行以下操作,请考虑对您的代码调试/日志记录的影响:

Syslog 消息通常传递给中央日志记录守护程序。守护进程可以过滤它们;将它们路由到不同的文件中(通常在 /var/log 下找到);将它们放在 SQL 数据库中;通过 TCP 或 UDP 将它们转发到集中式日志服务器;甚至通过电子邮件、寻呼机或短信提醒系统管理员。

于 2013-06-27T17:49:58.447 回答
0

可以肯定的是,puts增加了响应时间。真正的问题是多少。如果你有一个控制台打开,那么它会占用很多时间。我通常使用 emacs 而不是控制台,只是在 emacs shell 模式下打印内容有时会花费大量时间。但是,无论额外的时间多么少,当您不需要它们时,没有理由不删除它们。

从长远来看,铁皮人的建议是正确的,但如果你想偷懒做一个临时破解,处理它的一种方法是覆盖puts不做任何事情。

def puts *_; end
于 2013-06-27T17:50:07.227 回答