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



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

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

因此,您应该只记录未捕获的异常。一旦您有了异常对象,您可以使用日志记录器的exception()方法轻松地做到这一点。

要处理所有未捕获的异常,您可以将脚本的入口点包装在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()
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

受主要答案的启发+如何使用Python日志模块写入文件?+在excepthook中打印原始异常,下面是如何将完整的跟踪写入文件test.log,就像在控制台中打印一样:

import logging, sys, traceback
logger = logging.getLogger('logger')
fh = logging.FileHandler('test.log')
logger.addHandler(fh)
def exc_handler(exctype, value, tb):
    logger.exception(''.join(traceback.format_exception(exctype, value, tb)))
sys.excepthook = exc_handler
print("hello")
1/0

最新更新