Coverage for src/mkdocs_llmstxt/_internal/logger.py: 91.67%
12 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-08 13:40 +0200
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-08 13:40 +0200
1# Logging functions.
3from __future__ import annotations
5import logging
6from typing import TYPE_CHECKING, Any
8if TYPE_CHECKING:
9 from collections.abc import MutableMapping
12class _PluginLogger(logging.LoggerAdapter):
13 """A logger adapter to prefix messages with the originating package name."""
15 def __init__(self, prefix: str, logger: logging.Logger):
16 """Initialize the object.
18 Arguments:
19 prefix: The string to insert in front of every message.
20 logger: The logger instance.
21 """
22 super().__init__(logger, {})
23 self.prefix = prefix
25 def process(self, msg: str, kwargs: MutableMapping[str, Any]) -> tuple[str, Any]:
26 """Process the message.
28 Arguments:
29 msg: The message:
30 kwargs: Remaining arguments.
32 Returns:
33 The processed message.
34 """
35 return f"{self.prefix}: {msg}", kwargs
38def _get_logger(name: str) -> _PluginLogger:
39 """Return a logger for plugins.
41 Arguments:
42 name: The name to use with `logging.getLogger`.
44 Returns:
45 A logger configured to work well in MkDocs,
46 prefixing each message with the plugin package name.
47 """
48 logger = logging.getLogger(f"mkdocs.plugins.{name}")
49 return _PluginLogger(name.split(".", 1)[0], logger)