簡體   English   中英

使用 python 的 logging 模塊記錄所有異常和錯誤

[英]Using python's logging module to log all exceptions and errors

我想檢查特定后台文件中的錯誤,但標准錯誤 stream 由前台程序控制,並且未顯示問題中文件中的錯誤。 不過,我可以使用logging模塊並將 output 寫入文件。 我想知道如何使用它來記錄所有異常、錯誤及其回溯。

記錄程序中拋出的任何異常可能是個壞主意,因為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM