diff --git a/mo/web/__init__.py b/mo/web/__init__.py index b4f5183e59ca4e4b2091675d0f79e67cdc06a464..2a16ef2a64fe897bf4bc91e81f52048fd52e0077 100644 --- a/mo/web/__init__.py +++ b/mo/web/__init__.py @@ -32,17 +32,6 @@ db.flask_db = SQLAlchemy(app, metadata=db.metadata) Bootstrap(app) # make bootstrap libs accessible for the app -# Nastavíme logování: -# - náš hlavní logger se jmenuje "mo" -# - app.logger se jmenuje "mo.web" a nepropaguje se do hlavního -log_handler = flask.logging.default_handler -log_formatter = logging.Formatter(fmt='%(asctime)-15s.%(msecs)03d %(levelname)-5.5s [%(process)s] (%(name)s) %(message)s', datefmt='%Y-%m-%d %H:%M:%S') -log_handler.setFormatter(log_formatter) -app.logger.removeHandler(log_handler) -app.logger.setLevel(logging.DEBUG) -root_logger = logging.getLogger() -root_logger.addHandler(log_handler) - # Budeme používat české locale locale.setlocale(locale.LC_COLLATE, 'cs_CZ.UTF-8') @@ -54,6 +43,40 @@ app.jinja_env.filters.update(timedelta=util_format.timedelta) app.jinja_env.filters.update(time_and_timedelta=util_format.time_and_timedelta) +# Incializace logování + +def setup_logging(): + # Logování v Pythonu je vymyšlené hezky, ale bohužel spousta modulů má tendenci + # konfigurovat si u svých loggerů náhodné handlery. Pokud chceme, aby bylo logování + # aspoň trochu jednotné, musíme jim to trochu předrátovat. + + # Nastavíme root logger, aby logoval po našem do flaskového logu + log_handler = flask.logging.default_handler + log_formatter = logging.Formatter(fmt='%(asctime)-15s.%(msecs)03d %(levelname)-5.5s [%(process)s] (%(name)s) %(message)s', + datefmt='%Y-%m-%d %H:%M:%S') + log_handler.setFormatter(log_formatter) + root_logger = logging.getLogger() + root_logger.addHandler(log_handler) + + # app.logger se jmenuje "mo.web" a propaguje se do root loggeru, + # takže nechceme, aby měl svůj handler. + app.logger.removeHandler(log_handler) + app.logger.setLevel(logging.DEBUG) + + # sqlalchemy má logger, ke kterému si při prvním vypsání hlášky přidá handler, + # není-li tam zatím žádný. Tak přidáme dummy handler. Vše se propaguje do root loggeru. + sqla_logger = logging.getLogger('sqlalchemy.engine.base.Engine') + sqla_logger.addHandler(logging.NullHandler()) + + # werkzeug má vlastní handler s vlastním formátem hlášek, který už obsahuje timestamp, + # takže vypneme propagování + wz_logger = logging.getLogger('werkzeug') + wz_logger.propagate = False + + +setup_logging() + + # Inicializace požadavků a nucená autorizace class NeedLoginError(werkzeug.exceptions.Forbidden):