Python中logging模块设置 exc_info 为True,输出完整的 Traceback 信息 - 图1
在进行异常处理的时候,通常我们会直接将异常进行字符串格式化,但其实可以直接指定一个参数将 traceback 打印出来,示例如下:

  1. import logging
  2. logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  3. try:
  4. result = 5 / 0
  5. except Exception as e:
  6. # bad
  7. logging.error('Error: %s', e)
  8. # good
  9. logging.error('Error', exc_info=True)
  10. # good
  11. logging.exception('Error')

如果我们直接使用字符串格式化的方法将错误输出的话,是不会包含 Traceback 信息的,但如果我们加上 exc_info 参数或者直接使用 exception() 方法打印的话,那就会输出 Traceback 信息了
运行结果如下:

  1. 2018-06-03 22:24:31,927 - root - ERROR - Error: division by zero
  2. 2018-06-03 22:24:31,927 - root - ERROR - Error
  3. Traceback (most recent call last):
  4. File "/private/var/books/aicodes/loggingtest/demo9.py", line 6, in <module>
  5. result = 5 / 0
  6. ZeroDivisionError: division by zero
  7. 2018-06-03 22:24:31,928 - root - ERROR - Error
  8. Traceback (most recent call last):
  9. File "/private/var/books/aicodes/loggingtest/demo9.py", line 6, in <module>
  10. result = 5 / 0
  11. ZeroDivisionError: division by zero

bad

logging.error(‘Error: %s’, e) # 等同 logging.error(‘Error: %s’, e.message

good

logging.error(‘Error’, exc_info=True)

good

logging.exception(‘Error’)