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

それよりも優れたツールがありますputsdebuggerまたはPRYをデバッグ モードで使用する方法、および/または Ruby の組み込みのLoggerまたはSyslogを使用して、デバッグ レベルの出力を制御できるようにする方法を学びます。

歴史的に、Syslog を使用するための Ruby のドキュメントはかなり... 不足していました。Ruby v2.0 では大幅に改善され、ドキュメントも充実しています。そのため、真のパワーが必要な場合は、Logger または Syslog と Syslog::Logger を参照してください。

これは、Syslog のドキュメントからのものです。次のことができる場合、コードのデバッグ/ロギングへの影響を考慮してください。

通常、syslog メッセージは中央のロギング デーモンに渡されます。デーモンはそれらをフィルタリングする場合があります。それらを別のファイルにルーティングします (通常は /var/log の下にあります)。それらを SQL データベースに配置します。TCP または UDP 経由で集中ログ サーバーに転送します。または、電子メール、ポケットベル、またはテキスト メッセージでシステム管理者に警告することもできます。

于 2013-06-27T17:49:58.447 に答える
0

puts応答時間が長くなることは確かです。本当の問題は、いくらかです。コンソールを開いている場合は、かなりの時間がかかります。私は通常、コンソールの代わりに emacs を使用していますが、emacs シェル モードで出力するだけでも、非常に時間がかかることがあります。しかし、余分な時間がどれだけ少なくても、不要なときにそれらを削除しない理由はありません。

長期的には、ブリキ男が提案することは正しいですが、怠け者で一時的なハックをしたい場合、それに対処する1つの方法は、上書きputsして何もしないことです.

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