web-dev-qa-db-ja.com

スタックトレースを含む例外をファイルに出力する

スクリプトに簡単なログを入れようとしています。このログは、エラーがどこにあるか、およびスクリプトを修復するために必要な可能な限り多くの情報を教えてくれるはずです。

を除いて、ファイルstr(e)に印刷を入れましたが、何が問題になっているのかを知るための情報はほとんどありません。

どうすればそれを詳しく説明できますか?たとえば、コンソールに表示されるキャッチされていない例外テキスト全体は?

try:
    #code
except Exception as e:
   print_to_file(log.txt,str(e))
11
Milano

これを試して、

import traceback
try:
    1/0 
except Exception as e:
    with open('log.txt', 'a') as f:
        f.write(str(e))
        f.write(traceback.format_exc())

より良いソリューションが必要な場合は、タイムスタンプ、ファイルサイズ、およびローテーションを管理するLoggerを使用する必要があります(ロガーハンドラーを実行)

これは、ロガー、タイムスタンプ、ローテーションの例です

import logging
from logging.handlers import RotatingFileHandler
import traceback

logger = logging.getLogger("Rotating Log")
logger.setLevel(logging.ERROR)
handler = RotatingFileHandler("log.txt", maxBytes=10000, backupCount=5)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
try:
    1/0 
except Exception as e:
    logger.error(str(e))
    logger.error(traceback.format_exc())
19
Horacio