File size: 2,235 Bytes
219ee1a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | """
Centralised logging configuration.
One entrypoint β `setup_logging()` β that the Flask app calls at startup.
Every module in the project just does `logger = logging.getLogger(__name__)`
at the top; their output goes through the format + level configured here.
Environment variables
---------------------
LOG_LEVEL β DEBUG / INFO / WARNING / ERROR (default: INFO)
LOG_TIMESTAMPS β '1' (default) to include timestamps; '0' for a plain format
TRANSFORMERS_LOG β override the transformers library log level (default: WARNING)
"""
import logging
import os
import sys
_CONFIGURED = False
def setup_logging():
"""Configure root logger, then quieten third-party loggers. Idempotent."""
global _CONFIGURED
if _CONFIGURED:
return
_CONFIGURED = True
level_name = os.getenv("LOG_LEVEL", "INFO").upper()
level = getattr(logging, level_name, logging.INFO)
if os.getenv("LOG_TIMESTAMPS", "1") == "1":
fmt = "[%(asctime)s] %(levelname)-5s %(name)s :: %(message)s"
datefmt = "%H:%M:%S"
else:
fmt = "%(levelname)-5s %(name)s :: %(message)s"
datefmt = None
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(logging.Formatter(fmt, datefmt=datefmt))
root = logging.getLogger()
# Wipe any default handlers (e.g. ones Flask/werkzeug may have installed)
for h in list(root.handlers):
root.removeHandler(h)
root.addHandler(handler)
root.setLevel(level)
# Quieten noisy third parties
tf_level = os.getenv("TRANSFORMERS_LOG", "WARNING").upper()
logging.getLogger("transformers").setLevel(getattr(logging, tf_level, logging.WARNING))
# Werkzeug's request log is useful but verbose β keep at WARNING so our
# own Flask request hooks do the talking.
logging.getLogger("werkzeug").setLevel(logging.WARNING)
# urllib3 + huggingface_hub chatter during model downloads
logging.getLogger("urllib3").setLevel(logging.WARNING)
logging.getLogger("huggingface_hub").setLevel(logging.WARNING)
logging.getLogger("filelock").setLevel(logging.WARNING)
logging.getLogger(__name__).info(
"Logging configured at level %s (transformers=%s)", level_name, tf_level,
)
|