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 1/3] 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 2fd69f1bc..80389b2c0 100644 --- a/pelican/__init__.py +++ b/pelican/__init__.py @@ -19,7 +19,7 @@ # 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 ef49d2804..edf2f1826 100644 --- a/pelican/log.py +++ b/pelican/log.py @@ -126,11 +126,13 @@ def error(self, *args, stacklevel=1, **kwargs): # 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) From f8f3cff7317d73b9b2f714fc2479abdccb19694f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pit-Claudel?= Date: Sat, 16 Mar 2024 00:12:31 +0100 Subject: [PATCH 2/3] Fix typo in docstring --- pelican/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pelican/__init__.py b/pelican/__init__.py index 80389b2c0..2d0098237 100644 --- a/pelican/__init__.py +++ b/pelican/__init__.py @@ -461,7 +461,7 @@ def parse_arguments(argv=None): default="rich", choices=LOGS_HANDLERS, help=( - "Which handler to to format log messages. " + "Which handler to use to format log messages. " "The `rich` handler prints output in columns." ), ) From 9eed88ca9e7f025848b0df602de3cc42fe2b7c10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pit-Claudel?= Date: Tue, 16 Apr 2024 17:39:58 +0200 Subject: [PATCH 3/3] Rename logs-handler to log-handler --- pelican/__init__.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pelican/__init__.py b/pelican/__init__.py index 2d0098237..983b3e6f3 100644 --- a/pelican/__init__.py +++ b/pelican/__init__.py @@ -455,11 +455,11 @@ def parse_arguments(argv=None): ), ) - LOGS_HANDLERS = {"plain": None, "rich": DEFAULT_LOG_HANDLER} + LOG_HANDLERS = {"plain": None, "rich": DEFAULT_LOG_HANDLER} parser.add_argument( - "--logs-handler", + "--log-handler", default="rich", - choices=LOGS_HANDLERS, + choices=LOG_HANDLERS, help=( "Which handler to use to format log messages. " "The `rich` handler prints output in columns." @@ -520,7 +520,7 @@ 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] + args.log_handler = LOG_HANDLERS[args.log_handler] return args @@ -644,7 +644,7 @@ def main(argv=None): level=args.verbosity, fatal=args.fatal, name=__name__, - handler=args.logs_handler, + handler=args.log_handler, logs_dedup_min_level=logs_dedup_min_level, )