当前位置:网站首页>How do I write Flask's excellent debug log message to a file in production?
How do I write Flask's excellent debug log message to a file in production?
2022-07-06 22:22:00 【Bustling city 】
problem :
I have a Flask application that works well and produces an occasional error, which is visible when it is running with debug=True
: I have one Flask The application works well , Occasionally, an error occurs , When it is used debug=True
Visible at runtime :
if __name__ == '__main__': app.run(debug=True)
I get useful error messages such as: I received useful error messages , for example :
Traceback (most recent call last): File "./main.py", line 871, in index_routeKeyError: 'stateIIIII'
I would like to get error messages like these saved to a file when I run the application in production (using Lighttpd + fastcgi). When I run an application in a production environment ( Use Lighttpd + fastcgi) when , I want to save these error messages to a file .
After looking at various StackOverflow questions ( http://flask.pocoo.org/docs/errorhandling/ , http://docs.python.org/2/library/logging.html , etc.); After checking various StackOverflow problem ( http://flask.pocoo.org/docs/errorhandling/ 、 http://docs.python.org/2/library/logging.html etc. ) after ;the Flask mailing list;Flask Mailing list, ;and a few blogs, it seems there is no easy way just to send all the great error messages to a file - I need to use the Python logging module to customise things. And some blogs , There seems to be no simple way to send all important error messages to the file - I need to use Python The logging module defines the content .So I came up with the following code. So I came up with the following code .
At the top of my application file I have various imports followed by: At the top of my application file , I have all kinds of import , And then there was :
app = Flask(__name__)if app.debug is not True: import logging from logging.handlers import RotatingFileHandler file_handler = RotatingFileHandler('python.log', maxBytes=1024 * 1024 * 100, backupCount=20) file_handler.setLevel(logging.ERROR) app.logger.setLevel(logging.ERROR) app.logger.addHandler(file_handler)
I have then put the code for each route in a try/except statement and use traceback to work out which line the error came from and print a nice error message: Then I put the code of each route in try/except In the sentence , And use backtracking to determine which line the error came from and print a good error message :
def some_route(): try: # code for route in here (including a return statement) except: exc_type, exc_value, exc_traceback = sys.exc_info() app.logger.error(traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2)) return render_template('error.html')
And then right at the end of the file I remove the debug=True
statement. Then at the end of the file , I deleted debug=True
sentence .Though I don't think I need to do that as the application is being run by a fastcgi server(?) when it is run in production. Although I don't think I need to do this , Because the application is run in production by fastcgi The server (?) function .The last two lines of my application code look like this: The last two lines of my application code are shown below :
if __name__ == '__main__': app.run()
I am struggling to get this working. I'm trying to make this work .I think the best I have managed is to get a single error log message to be saved in the file using ( app.logger.error('test message')
), but it only prints that one message. I think the best way I manage is to use ( app.logger.error('test message')
) Save a single error log message in a file , But it only prints a message .An attempt to log another error directly after that one is simply ignored. An attempt to record another error directly after this error is simply ignored .
Solution :
Reference resources : https://stackoom.com/en/question/wtux边栏推荐
- zabbix 代理服务器 与 zabbix-snmp 监控
- GPS from getting started to giving up (12), Doppler constant speed
- GPS du début à l'abandon (XIII), surveillance autonome de l'intégrité du récepteur (raim)
- Oracle-控制文件及日志文件的管理
- Research and investment strategy report of China's VOCs catalyst industry (2022 Edition)
- [sciter bug] multi line hiding
- GPS从入门到放弃(十一)、差分GPS
- 在IPv6中 链路本地地址的优势
- GPS from entry to abandonment (XVII), tropospheric delay
- Management background --1 Create classification
猜你喜欢
GNN,请你的网络层数再深一点~
重磅新闻 | Softing FG-200获得中国3C防爆认证 为客户现场测试提供安全保障
GNN, please deepen your network layer~
剪映+json解析将视频中的声音转换成文本
自制J-Flash烧录工具——Qt调用jlinkARM.dll方式
Build op-tee development environment based on qemuv8
GPS from getting started to giving up (XV), DCB differential code deviation
PVL EDI 项目案例
Leetcode question brushing (XI) -- sequential questions brushing 51 to 55
Installation and use of labelimg
随机推荐
[sciter]: encapsulate the notification bar component based on sciter
Save and retrieve strings
2020 Bioinformatics | GraphDTA: predicting drug target binding affinity with graph neural networks
Lora sync word settings
硬件開發筆記(十): 硬件開發基本流程,制作一個USB轉RS232的模塊(九):創建CH340G/MAX232封裝庫sop-16並關聯原理圖元器件
GPS from getting started to giving up (XIII), receiver autonomous integrity monitoring (RAIM)
[leetcode daily clock in] 1020 Number of enclaves
ZABBIX proxy server and ZABBIX SNMP monitoring
Shell product written examination related
Problems in the process of opencv300 cmake generating project
Management background --5, sub classification
HDR image reconstruction from a single exposure using deep CNN reading notes
NetXpert XG2帮您解决“布线安装与维护”难题
Unity3d minigame unity webgl transform plug-in converts wechat games to use dlopen, you need to use embedded 's problem
硬件开发笔记(十): 硬件开发基本流程,制作一个USB转RS232的模块(九):创建CH340G/MAX232封装库sop-16并关联原理图元器件
[MySQL] online DDL details
pytorch_YOLOX剪枝【附代码】
Four data streams of grpc
UNI-Admin基础框架怎么关闭创建超级管理员入口?
A Mexican airliner bound for the United States was struck by lightning after taking off and then returned safely