亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Python 在日志文件中復制/捕獲標準輸出

如何使用 Python 在日志文件中復制/捕獲標準輸出

倚天杖 2022-07-19 15:11:58
我在 Python 設置中有一個基本的記錄器處理程序來記錄到文件。我希望此日志處理程序記錄通常會打印到控制臺的任何/所有標準輸出或標準錯誤消息,但我不想重定向或捕獲它。換句話說,我仍然希望以通常的方式打印所有內容。這里的用例是我不想用try:    do_something_that_could_raise_exception()except Exception as e:    logger.exception(e)相反,我只想讓應用程序運行,并能夠查看日志文件以查看遇到的任何錯誤的堆棧跟蹤。我只希望所有 stdout/stderr 消息也出現在我的日志文件中。這似乎是一個在 SO 上被多次詢問的主題的轉折。我已經閱讀了Logging Python stdout to File... with active stdout (backspacing/updating) , Redirect stdout to a file in Python? ,以及許多其他人,但這些似乎并沒有解決我的情況。我見過的所有問題都在談論如何使用多個處理程序同時打印到日志和標準輸出,或者如何將標準輸出重定向到日志以便終端中不顯示任何內容。編輯為后代編輯。經過更多搜索后,我發現https://code.tutsplus.com/tutorials/professional-error-handling-with-python--cms-25950,它演示了如何添加一個函數裝飾器,將異常定向到給定的日志處理程序. 這并不像我希望的那樣簡潔(因為我仍然必須將函數裝飾器添加到我的所有函數定義中),但它比將我的所有函數調用包裝在 try-except 中要簡潔得多。def log_error(logger)    def decorated(f):        @functools.wraps(f)        def wrapped(*args, **kwargs):            try:                return f(*args, **kwargs)            except Exception as e:                if logger:                    logger.exception(e)                raise        return wrapped    return decoratedHere is how to use it:0102030405060708091011import logginglogger = logging.getLogger()@log_error(logger)def f():    raise Exception('I am exceptional')
查看完整描述

1 回答

?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

由于您似乎只對可以使用的異常sys.excepthook而不是包裝器感興趣,如下所述:Logging uncaught exceptions in Python

這樣,它只需要定義一次,并且在定義新函數時不會忘記它。


查看完整回答
反對 回復 2022-07-19
  • 1 回答
  • 0 關注
  • 126 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號