How to log uncaught exceptions in Flask routes with logging?

Solution 1
import logging

logging.basicConfig(level=logging.ERROR,
                    filename='app.log',
                    filemode='a',
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S')
from flask import Flask, render_template

app = Flask(__name__)

@app.errorhandler(Exception)
def handle_exception(e):
    # log the exception
    logging.exception('Exception occurred')
    # return a custom error page or message
    return render_template('error.html'), 500
from flask import Flask, render_template

app = Flask(__name__)

# configure the logger
logging.basicConfig(level=logging.ERROR,
                    filename='app.log',
                    filemode='a',
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S')

# register the error handler
@app.errorhandler(Exception)
def handle_exception(e):
    # log the exception
    logging.exception('Exception occurred')
    # return a custom error page or message
    return render_template('error.html'), 500

# define the normal route
@app.route('/')
def index():
    return 'Hello, world!'

# define the route that raises an exception
@app.route('/error')
def error():
    # this will cause a ZeroDivisionError
    x = 1 / 0
    return 'This will never be returned'

# run the app
if __name__ == '__main__':
    app.run(debug=True)
2021-07-07 12:34:56 - werkzeug - ERROR - Exception occurred
Traceback (most recent call last):
  File "/home/user/.local/lib/python3.8/site-packages/flask/app.py", line 2464, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/user/.local/lib/python3.8/site-packages/flask/app.py", line 2450, in wsgi_app
    response = self.handle_exception(e)
  File "/home/user/.local/lib/python3.8/site-packages/flask/app.py", line 1867, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/user/.local/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/home/user/.local/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/user/.local/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/user/.local/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/user/.local/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/home/user/.local/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/user/.local/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/user/flask_app.py", line 31, in error
    x = 1 / 0
ZeroDivisionError: division by zero
Solution 2
from flask import abort
from functools import wraps


def catch_uncaught(function):
"""
catches uncaught exceptions and logs them
aborts the request
"""

    @wraps(function)
    def wrapper(*args, **kwargs):
        try:
            res = function(*args, **kwargs)
            return res  # no errors occurred
        except Exception as e:
            # log stack trace
            logging.error("\n" + traceback.format_exc() + "\n")
            # abort the request instead of crashing
            abort(500, "Internal Server error, do not retry")
    return wrapper
@app.route("/")
@catch_uncaught
def index():
    sjkfq  # uncaught exception
    return "hello"