使用python的日志记录模块记录所有异常和错误

时间:2011-11-08 13:01:37

标签: python debugging

我想检查特定后台文件中的错误,但标准错误流正由前台程序控制,并且问题中文件中的错误未显示。不过,我可以使用logging模块并将输出写入文件。我想知道如何使用它来记录所有异常,错误及其追溯。

2 个答案:

答案 0 :(得分:52)

记录程序中抛出的任何异常可能是一个坏主意,因为Python也会对正常控制流使用异常。

因此,您应该只记录未捕获的例外。一旦有异常对象,就可以使用记录器exception() method轻松完成此操作。

要处理所有未捕获的异常,您可以将脚本的入口点包装在try...except块中,也可以通过重新分配sys.excepthook()来安装自定义异常处理程序:

import logging
import sys

logger = logging.getLogger('mylogger')
# Configure logger to write to a file...

def my_handler(type, value, tb):
    logger.exception("Uncaught exception: {0}".format(str(value)))

# Install exception handler
sys.excepthook = my_handler

# Run your main script here:
if __name__ == '__main__':
    main()

答案 1 :(得分:0)

import sys
import logging
import traceback

# log uncaught exceptions
def log_exceptions(type, value, tb):
    for line in traceback.TracebackException(type, value, tb).format(chain=True):
        logging.exception(line)
    logging.exception(value)

    sys.__excepthook__(type, value, tb) # calls default excepthook

sys.excepthook = log_exceptions