当前位置:网站首页>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
原网站

版权声明
本文为[Bustling city ]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202131054459683.html