Flask 框架中的標準代碼允許在用戶遇到導致錯誤的頁面時向人們發送電子郵件,通常(以及我已實現的)在app.py腳本中如下所示:from app import app...if not app.debug: import logging from logging.handlers import SMTPHandler mail_handler = SMTPHandler(EMAIL_SERVER, EMAIL_FROM, EMAIL_ADMINS, EMAIL_SUBJECT, credentials=(EMAIL_ EMAIL,'***'), port=EMAIL_PORT) mail_handler.setLevel(logging.ERROR) app.logger.addHandler(mail_handler)這很棒,因為它會發送一封包含啟動調試過程信息的電子郵件,如下所示:Exception on / [GET]Traceback (most recent call last):File "C:\Python27\lib\site-packages\flask\app.py", line 1817, in wsgi_appresponse = self.full_dispatch_request()File "C:\Python27\lib\site-packages\flask\app.py", line 1477, in full_dispatch_requestrv = self.handle_user_exception(e)File "C:\Python27\lib\site-packages\flask\app.py", line 1381, in handle_user_exceptionreraise(exc_type, exc_value, tb)File "C:\Python27\lib\site-packages\flask\app.py", line 1475, in full_dispatch_requestrv = self.dispatch_request()File "C:\Python27\lib\site-packages\flask\app.py", line 1461, in dispatch_requestreturn self.view_functions[rule.endpoint](**req.view_args)File "hello.py", line 6, in hello_worldraise ExceptionException這不包含用戶輸入的 GET/POST 變量。這些可能是調試過程的關鍵,這就是我的問題。您如何request.form在這封電子郵件中包含所有變量(用于 GET/POST)?雖然我無法通過 Google 找到該問題的直接答案,但我找到的最接近的資源是 Flask 文檔(http://flask.pocoo.org/docs/1.0/logging/#logging),其中有一個部分“注入請求信息”討論了子類化,logging.Formatter但它指的是額外的信息,例如 IP 地址,并需要識別特定的值。這讓我想到了我的問題:如何修改日志電子郵件以包含來自用戶的錯誤和所有請求(GET/POST)數據?
1 回答

汪汪一只貓
TA貢獻1898條經驗 獲得超8個贊
兩周后,仍然沒有明確回答我的問題。我發現的解決方法是修改 500 錯誤處理程序:
@app.errorhandler(500)
def status_code_500(exc):
# do stuff in here
從這里的解決辦法是將所有轉儲request.args和request.form值到使用字符串json.dumps(request.args, indent=4, sort_keys=True)。這可以變成電子郵件,我們可以使用它@app.errorhandler通過 SMTPhandler 最好在新線程上發送電子郵件,這樣用戶就不會被阻止。
我們還可以在這封電子郵件中包含堆?;厮輙raceback.formatexc。
這需要一些工作,因為我們基本上是重寫已經內置的現有代碼,但我還沒有找到允許我們將文本添加到 logging.handler 的電子郵件的解決方案。
添加回答
舉報
0/150
提交
取消