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.
This commit is contained in:
Clément Pit-Claudel 2024-03-12 11:15:21 +01:00
commit 885ebca67b
2 changed files with 22 additions and 3 deletions

View file

@ -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,
)

View file

@ -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)