Coverage for src/mkdocs_iframe/loggers.py: 92.86%

14 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-06-06 09:32 -0400

1"""Logging functions.""" 

2 

3from __future__ import annotations 

4 

5import logging 

6from typing import Any, MutableMapping 

7 

8from mkdocs.utils import warning_filter 

9 

10 

11class LoggerAdapter(logging.LoggerAdapter): 

12 """A logger adapter to prefix messages.""" 

13 

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

15 """Initialize the object. 

16 

17 Arguments: 

18 prefix: The string to insert in front of every message. 

19 logger: The logger instance. 

20 """ 

21 super().__init__(logger, {}) 

22 self.prefix = prefix 

23 

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

25 """Process the message. 

26 

27 Arguments: 

28 msg: The message: 

29 kwargs: Remaining arguments. 

30 

31 Returns: 

32 The processed message, and the remaining arguments. 

33 """ 

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

35 

36 

37def get_logger(name: str) -> LoggerAdapter: 

38 """Return a pre-configured logger. 

39 

40 Arguments: 

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

42 

43 Returns: 

44 A logger configured to work well in MkDocs. 

45 """ 

46 logger = logging.getLogger(f"mkdocs.plugins.{name}") 

47 logger.addFilter(warning_filter) 

48 return LoggerAdapter(name, logger)