当前位置:网站首页>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边栏推荐
- 解决项目跨域问题
- 中国VOCs催化剂行业研究与投资战略报告(2022版)
- SQL Server生成自增序号
- Management background --4, delete classification
- Unity3d minigame unity webgl transform plug-in converts wechat games to use dlopen, you need to use embedded 's problem
- Lora sync word settings
- How does the uni admin basic framework close the creation of super administrator entries?
- Anaconda installs third-party packages
- 二叉(搜索)树的最近公共祖先 ●●
- Adjustable DC power supply based on LM317
猜你喜欢
Unity3d minigame-unity-webgl-transform插件转换微信小游戏报错To use dlopen, you need to use Emscripten‘s...问题
Chapter 4: talk about class loader again
C # réalise la liaison des données du rapport Crystal et l'impression du Code à barres 4
Classic sql50 questions
AI enterprise multi cloud storage architecture practice | Shenzhen potential technology sharing
Seata aggregates at, TCC, Saga and XA transaction modes to create a one-stop distributed transaction solution
GPS from getting started to giving up (12), Doppler constant speed
[线性代数] 1.3 n阶行列式
硬件开发笔记(十): 硬件开发基本流程,制作一个USB转RS232的模块(九):创建CH340G/MAX232封装库sop-16并关联原理图元器件
(十八)LCD1602实验
随机推荐
Force buckle 575 Divide candy
2021 geometry deep learning master Michael Bronstein long article analysis
i. Mx6ull build boa server details and some of the problems encountered
Powerful domestic API management tool
十二、启动流程
About the professional ethics of programmers, let's talk about it from the way of craftsmanship and neatness
Shell product written examination related
【sciter Bug篇】多行隐藏
Spatial domain and frequency domain image compression of images
Anaconda installs third-party packages
插入排序与希尔排序
第4章:再谈类的加载器
C # realizes crystal report binding data and printing 4-bar code
Oracle-控制文件及日志文件的管理
GD32F4XX串口接收中断和闲时中断配置
Management background --2 Classification list
ResNet-RS:谷歌领衔调优ResNet,性能全面超越EfficientNet系列 | 2021 arxiv
2022-07-05 使用tpcc对stonedb进行子查询测试
What a new company needs to practice and pay attention to
Force deduction question 500, keyboard line, JS implementation