corvid
corvid

Reputation: 11197

automatically logging flask's messages to a logger

I was following Flask's documentation on how to configure logging. However, it seems that it does not write to the logger unless I explicitly tell it to (and the documentation seems to agree.)

Here is how I configured my logger, within create_app()

def create_app(environment):
  """ creates the flask application. Uses a parameter to choose which config to use """
  app = Flask(__name__)
  # ...

  error_handler = RotatingFileHandler(
    os.path.join(app.config['LOG_FOLDER'], 'flask.log'),
    maxBytes=100000,
    backupCount=1
  )
  error_handler.setLevel(logging.NOTSET)
  error_handler.setFormatter(Formatter(
    '%(asctime)s %(levelname)s: %(message)s'
    '[in %(pathname)s:%(lineno)d]'
  ))
  app.logger.addHandler(error_handler)

Now I want it such that, whenever an error occurs like it would in the debugger, to put the traceback in the log. Is this possible while on production?

Upvotes: 1

Views: 607

Answers (1)

Sean Vieira
Sean Vieira

Reputation: 160053

The easiest way to do this is to register an error handler with teardown_request:

@app.teardown_request
def log_errors(error):
    if error is None:
        return

    app.logger.error("An error occurred while handling the request", error)

Upvotes: 3

Related Questions