1

私はPythonが初めてです。Vim を Python モードで使用してコードを編集およびテストしていますが、同じコードを複数回実行すると、コードが最初に実行されたときにのみログ ファイルが更新されることに気付きました。たとえば、以下は「testlogging.py」というコードの一部です。

#!/usr/bin/python2.7
import os.path
import logging

filename_logging = os.path.join(os.path.dirname(__file__), "testlogging.log")
logging.basicConfig(filename=filename_logging, filemode='w',
                level=logging.DEBUG)
logging.info('Aye')

新しい gvim セッションを開いてこのコードを python-mode で実行すると、「testlogging.log」という内容のファイルが作成されます。

INFO:root:Aye

有望に見えます!しかし、ログ ファイルを削除して pythong モードでコードを再度実行すると、ログ ファイルは再作成されません。この時点で、このような端末でコードを実行すると

./testlogging.py

その後、ログ ファイルが再び生成されます。

Python のドキュメントを確認したところ、ロギング チュートリアル ( https://docs.python.org/2.7/howto/logging.html#logging-to-a-file ) で次の行に気付きました。

非常に一般的な状況は、ログ イベントをファイルに記録することです。次に、それを見てみましょう。新しく開始した Python インタープリターで次のことを試してください。上記のセッションから続行しないでください:

したがって、ログファイルが一度だけ更新されるというこの問題は、コードを2回目に実行したときに同じインタープリターに残っているpython-modeに関係していると思います。だから私の質問は、ロギングモジュールをいじったり、コードに何かを入れてインタープリターをリセットしたり、Pythonモードにリセットするように指示したりすることで、この問題を解決する方法はありますか?

また、ロギングモジュールが機能するために新しく開始されたインタープリターが必要な理由にも興味があります...

事前にご協力いただきありがとうございます。

4

2 に答える 2

1

ログ ファイルは再作成されません。これは、ログ モジュールが古いログ ファイルを開いたままにしており、(削除したとしても) 書き込みを続行するためです。解決策は、同じインタープリターでコードを再度実行する前に、ロギング モジュールが取得したすべてのリソースを強制的に解放することです。

# configure logging
# log a message
# delete log file

logging.shutdown()

# configure logging
# log a message (log file will be recreated)

つまり、コードの最後で を呼び出しlogging.shutdown()てから、同じインタープリター内で再実行すると、期待どおりに動作します (実行ごとにログ ファイルが再作成されます)。

于 2014-09-21T11:22:11.277 に答える
0

"w" モードでログ ファイルを開きました。「w」は最初からデータを書き込むことを意味するため、最後の実行のログのみが表示されました。

これが、ログ ファイルに同じ内容が表示される理由です。

5 行目から 7 行目のコードを次のように修正する必要があります。

filename_logging = os.path.join(os.path.dirname(__file__), "testlogging.log")
logging.basicConfig(filename=filename_logging, filemode='a',
            level=logging.DEBUG)

上記のコードは「a」モード、つまり追加モードを使用しているため、新しいログ データはログ ファイルの末尾に追加されます。

于 2014-09-21T11:15:37.003 に答える