From 39c964450ce5e1dd2987561f475374790f02c6c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pit-Claudel?= Date: Thu, 30 May 2024 17:13:27 +0200 Subject: [PATCH] Choose logging handler via `--log-handler` CLI option (#3293) --- pelican/__init__.py | 16 +++++++++++++++- pelican/log.py | 9 +++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/pelican/__init__.py b/pelican/__init__.py index aef4b124..8a880584 100644 --- a/pelican/__init__.py +++ b/pelican/__init__.py @@ -19,7 +19,7 @@ __path__ = extend_path(__path__, __name__) # pelican.log has to be the first pelican module to be loaded # because logging.setLoggerClass has to be called before logging.getLogger -from pelican.log import console # noqa: I001 +from pelican.log import console, DEFAULT_LOG_HANDLER # noqa: I001 from pelican.log import init as init_logging from pelican.generators import ( ArticlesGenerator, @@ -455,6 +455,17 @@ def parse_arguments(argv=None): ), ) + LOG_HANDLERS = {"plain": None, "rich": DEFAULT_LOG_HANDLER} + parser.add_argument( + "--log-handler", + default="rich", + choices=LOG_HANDLERS, + help=( + "Which handler to use to format log messages. " + "The `rich` handler prints output in columns." + ), + ) + parser.add_argument( "--logs-dedup-min-level", default="WARNING", @@ -509,6 +520,8 @@ def parse_arguments(argv=None): if args.bind is not None and not args.listen: logger.warning("--bind without --listen has no effect") + args.log_handler = LOG_HANDLERS[args.log_handler] + return args @@ -631,6 +644,7 @@ def main(argv=None): level=args.verbosity, fatal=args.fatal, name=__name__, + handler=args.log_handler, logs_dedup_min_level=logs_dedup_min_level, ) diff --git a/pelican/log.py b/pelican/log.py index ef49d280..edf2f182 100644 --- a/pelican/log.py +++ b/pelican/log.py @@ -126,11 +126,13 @@ logging.setLoggerClass(FatalLogger) # force root logger to be of our preferred class logging.getLogger().__class__ = FatalLogger +DEFAULT_LOG_HANDLER = RichHandler(console=console) + def init( level=None, fatal="", - handler=RichHandler(console=console), + handler=DEFAULT_LOG_HANDLER, name=None, logs_dedup_min_level=None, ): @@ -139,7 +141,10 @@ def init( LOG_FORMAT = "%(message)s" logging.basicConfig( - level=level, format=LOG_FORMAT, datefmt="[%H:%M:%S]", handlers=[handler] + level=level, + format=LOG_FORMAT, + datefmt="[%H:%M:%S]", + handlers=[handler] if handler else [], ) logger = logging.getLogger(name)