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

1# Logging functions. 

2 

3from __future__ import annotations 

4 

5import logging 

6from typing import TYPE_CHECKING, Any 

7 

8if TYPE_CHECKING: 

9 from collections.abc import MutableMapping 

10 

11 

12class _PluginLogger(logging.LoggerAdapter): 

13 """A logger adapter to prefix messages with the originating package name.""" 

14 

15 def __init__(self, prefix: str, logger: logging.Logger): 

16 """Initialize the object. 

17 

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 

24 

25 def process(self, msg: str, kwargs: MutableMapping[str, Any]) -> tuple[str, Any]: 

26 """Process the message. 

27 

28 Arguments: 

29 msg: The message: 

30 kwargs: Remaining arguments. 

31 

32 Returns: 

33 The processed message. 

34 """ 

35 return f"{self.prefix}: {msg}", kwargs 

36 

37 

38def _get_logger(name: str) -> _PluginLogger: 

39 """Return a logger for plugins. 

40 

41 Arguments: 

42 name: The name to use with `logging.getLogger`. 

43 

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)