Skip to content
Snippets Groups Projects
Commit 9bf70cfc authored by Martin Mareš's avatar Martin Mareš
Browse files

Další pokračování ságy o logování

Odhodlání pythoních modulů logovat si po svém je nebetyčné :(
parent 1fd12d8e
Branches
No related tags found
1 merge request!9WIP: Zárodek uživatelské části webu a submitování
......@@ -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):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment