注::この質問は、Pythonがロギングによってエラーメッセージを出すという前提に基づいています。答えは、仮定が間違っていることを示しています。Pythonプログラムは残りのコードを実行する前にロギングを設定できますか?
私は、コマンドラインからではなくデーモンによって起動されるプログラムを開発しています。 Stderrはnullデバイスにリダイレクトされます。
通常、メッセージはファイルに記録されますが、何らかのエラーによって通常の起動が妨げられている場合、ヌルデバイスに送信されたため、読み込むエラーメッセージはありません。
このような場合に少しデバッグ時間を節約するために、ちょっとしたこととして、ファイルロガーをルートロガーに追加する少しの "ランチャー"を試しました。
realprog
モジュールの意図的な構文エラーでテストしました。 2つの "start"メッセージをファイルに記録しますが、構文エラーのトレースバックはstderrに出力されます。助けてもらえますか?
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.addHandler(logging.FileHandler('test.log'))
logger.info("logging start")
def real_start():
# assume e.g. a syntax error in the realprog
import realprog
realprog.main()
if __name__ == '__main__':
logger.info("program start")
real_start()
エラーメッセージを投稿できますか? – haifzhan
@HaifengZhang:import realprogは、構文エラーが予想通りに失敗します。他のメッセージはありません。その標準的なトレースバック付きの標準メッセージです。ファイルに記録されず、印刷される点を除いて、メッセージ自体には何も問題はありません。このエラーメッセージが必要ですか? – VPfB