web-dev-qa-db-ja.com

ログ記録方法python例外?

Pythonで例外をログに記録するにはどうすればよいですか?

私はいくつかのオプションを見て、このコードを使用して実際の例外の詳細にアクセスできることがわかりました。

_import sys
import traceback

try:
    1/0
except:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    traceback.print_exception(exc_type, exc_value, exc_traceback)
_

ログに記録できるように、何らかの形で文字列print_exception()が標準出力にスローされるようにします。

63
Maxim Veksler

質問に答えるには、 print_exception() 関数を使用して、traceback.format_exception()の文字列バージョンを取得できます。トレースバックメッセージは、標準出力に出力するのではなく、文字列のリストとして返されるため、必要な処理を実行できます。例えば:

import sys
import traceback

try:
    asdf
except NameError:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    lines = traceback.format_exception(exc_type, exc_value, exc_traceback)
    print ''.join('!! ' + line for line in lines)  # Log it or whatever here

これは表示します:

!! Traceback (most recent call last):
!!   File "<stdin>", line 2, in <module>
!! NameError: name 'asdf' is not defined

ただし、rlotunで提案されている標準のPythonロギングモジュールを使用することをお勧めします。セットアップは最も簡単なものではありませんが、非常にカスタマイズ可能です。

58
Ben Hoyt

を見てみましょう logging.exceptionPython Logging Module

import logging 
def foo():
    try:
        some_code()
    except:
        logging.exception('')

これにより、現在の例外のトレースバックを自動的に取得し、適切に記録する必要があります。

105
rlotun

例外のロギングは、exc_info = Trueキーワード引数を任意のログメッセージに追加するだけです。 http://docs.python.org/2/library/logging.html のLogger.debugのエントリを参照してください。

例:

try: 
    raise Exception('lala')
except Exception:
    logging.info('blah', exc_info=True)

出力(もちろん、ログハンドラーの構成によって異なります):

2012-11-29 10:18:12,778 - root - INFO - <ipython-input-27-5af852892344> : 3 - blah
Traceback (most recent call last):
  File "<ipython-input-27-5af852892344>", line 1, in <module>
    try: raise Exception('lala')
Exception: lala
51
NeilenMarais

Python 3.5では、exc_info引数に例外インスタンスを渡すことができます。

import logging
try:
    1/0
except Exception as e:
   logging.error('Error at %s', 'division', exc_info=e)
13
yurez

まず、except句で適切な例外タイプを使用することを検討してください。次に、例外に名前を付けて、印刷できます。

try:
    1/0
except Exception as e:
    print e

Pythonバージョンに依存して、使用する必要があります

except Exception, e
5
erickrf