From 9bf70cfce5e88ff9236802f862c6ac8f998d5d1b Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Mon, 11 Jan 2021 19:29:18 +0100 Subject: [PATCH] =?UTF-8?q?Dal=C5=A1=C3=AD=20pokra=C4=8Dov=C3=A1n=C3=AD=20?= =?UTF-8?q?s=C3=A1gy=20o=20logov=C3=A1n=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Odhodlání pythoních modulů logovat si po svém je nebetyčné :( --- mo/web/__init__.py | 45 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/mo/web/__init__.py b/mo/web/__init__.py index b4f5183e..2a16ef2a 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): -- GitLab