如何loggingpythonexception?
我如何在Python中loggingexception?
我看了一些选项,发现我可以使用这段代码访问实际的exception详细信息:
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)
我想以某种方式得到stringprint_exception()
抛出到标准输出,以便我可以logging它。
要回答你的问题,你可以使用traceback.format_exception()
函数得到print_exception()
的string版本。 它将追踪消息作为string列表返回,而不是将其打印到标准输出,因此您可以使用它来执行所需的操作。 例如:
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
但是,我肯定会推荐使用标准的Python日志logging模块,正如rlotun所build议的那样。 这不是最简单的设置,但它是非常可定制的。
看看logging.exception
( Python日志模块 )
import logging def foo(): try: some_code() except: logging.exception('')
这应该会自动处理获取当前exception的追踪并正确logging。
loggingexception就像在任何日志消息中添加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)
输出(当然,取决于你的日志处理程序configuration):
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
首先,考虑在你的except子句中使用适当的Exceptiontypes。 然后,命名exception,您可以打印它:
try: 1/0 except Exception as e: print e
取决于你的Python版本,你必须使用
except Exception, e
在Python 3.5中,您可以在exc_info参数中传递exception实例:
import logging try: 1/0 except Exception as e: logging.error('Error at %s', 'division', exc_info=e)