From 885ebca67b3413661fd23cc950775233349e7fa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pit-Claudel?= Date: Tue, 12 Mar 2024 11:15:21 +0100 Subject: [PATCH] Add --logs-handler CLI option * pelican/__init__.py (parse_arguments): Declare new --logs-handler argument. Uses a string instead of a `type=` argument to get better error messages when passed an incorrect choice. (main): Pass `args.logs_handler` to `init_logging` * pelican/log.py: Expose default log handler as `DEFAULT_LOG_HANDLER`. (init): Pass handler to `logging.basicConfig`. Closes GH-3292. --- 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 2fd69f1b..80389b2c 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 +from pelican.log import console, DEFAULT_LOG_HANDLER from pelican.log import init as init_logging from pelican.generators import ( ArticlesGenerator, # noqa: I100 @@ -455,6 +455,17 @@ def parse_arguments(argv=None): ), ) + LOGS_HANDLERS = {"plain": None, "rich": DEFAULT_LOG_HANDLER} + parser.add_argument( + "--logs-handler", + default="rich", + choices=LOGS_HANDLERS, + help=( + "Which handler to 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.logs_handler = LOGS_HANDLERS[args.logs_handler] + return args @@ -631,6 +644,7 @@ def main(argv=None): level=args.verbosity, fatal=args.fatal, name=__name__, + handler=args.logs_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)