15

私が依存している大規模なライブラリの動作をデバッグしようとしています。このライブラリは、多くのソース ファイルを通じてデバッグ プリント ステートメントを散在させています (それほど多くはありません)。問題は、これらの debug print ステートメントのすべてではないにしてもほとんどが日付/時刻スタンプを含んでいないため、アプリケーション レベルでの障害をライブラリ コード自体の障害と関連付けることが難しいことです。

私が見ている失敗に関係していると思われるすべてのデバッグ出力のソース コードを変更するのではなく、組み込みの Python 印刷「関数」に一時的にモンキー パッチを適用して、すべての出力に接頭辞を付けることができるのではないかと考えました。タイムスタンプ。

組み込みのprint は、私が使用している Python 2.6 環境の関数ではないため、これが可能かどうかはわかりません。誰かがこれを行った、または Python への別のフックを使用して同様の結果を達成した場合は、あなたのアドバイス、またはこの問題を解決するためのコードに感謝します。

4

3 に答える 3

26

関数をオーバーライドすることはできませんwrite(読み取り専用です) ため、単純なモンキー パッチは次のようになります (印刷されたすべての行にタイムスタンプを追加します)。

old_f = sys.stdout
class F:
    def write(self, x):
        old_f.write(x.replace("\n", " [%s]\n" % str(datetime.now())))
sys.stdout = F()

例は次のようになります。

>>> print "foo"
foo [2011-02-03 09:31:05.226899]
于 2011-02-03T08:33:31.813 に答える