Source code for app.log

"""
app.log
=======

Register custom app loggers.
"""

import logging
from logging.handlers import SMTPHandler

from flask import Flask

formatter = logging.Formatter(
    "%(asctime)s %(levelname)s %(module)s %(message)s"
)


[docs] def smtp_handler(app: Flask) -> None: """Configure an SMTP handler for error reporting. :param app: Application object. """ server = app.config["MAIL_SERVER"] username = app.config["MAIL_USERNAME"] password = app.config["MAIL_PASSWORD"] admins = app.config["ADMINS"] valid_data = all(i is not None for i in (server, username, password)) secure = None if not app.debug and valid_data and admins: auth = (username, password) if app.config["MAIL_USE_TLS"]: secure = () handler = SMTPHandler( mailhost=(server, app.config["MAIL_PORT"]), fromaddr=f"no-reply@{server}", toaddrs=admins, subject="Application Failure", credentials=auth, secure=secure, ) handler.setLevel(logging.ERROR) handler.setFormatter(formatter) app.logger.addHandler(handler)
[docs] def integrate_loggers(app: Flask) -> None: """Integrate ``Flask`` logger with ``Gunicorn`` logger. https://trstringer.com/logging-flask-gunicorn-the-manageable-way/ :param app: Application object. """ gunicorn_logger = logging.getLogger("gunicorn.error") app.logger.handlers = gunicorn_logger.handlers app.logger.setLevel(gunicorn_logger.level)
[docs] def init_app(app: Flask) -> None: """Initialize application loggers. :param app: Application object. """ smtp_handler(app) if not app.config["DEBUG"]: integrate_loggers(app)