diff options
author | 2022-02-21 12:58:10 +0000 | |
---|---|---|
committer | 2022-02-21 12:58:10 +0000 | |
commit | bcdb3a77690e1e224225627f085d86689353e1cb (patch) | |
tree | bb21c2fa12e06b9c84142ddd4f1f4260f078b185 /botcore/loggers.py | |
parent | Modify Autodoc Formatting (diff) |
Port many utilities from bot
Diffstat (limited to 'botcore/loggers.py')
-rw-r--r-- | botcore/loggers.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/botcore/loggers.py b/botcore/loggers.py new file mode 100644 index 00000000..ac1db920 --- /dev/null +++ b/botcore/loggers.py @@ -0,0 +1,45 @@ +"""Custom logging class.""" + +import logging +import typing + +if typing.TYPE_CHECKING: + LoggerClass = logging.Logger +else: + LoggerClass = logging.getLoggerClass() + +TRACE_LEVEL = 5 + + +class CustomLogger(LoggerClass): + """Custom implementation of the `Logger` class with an added `trace` method.""" + + def trace(self, msg: str, *args, **kwargs) -> None: + """ + Log 'msg % args' with severity 'TRACE'. + + To pass exception information, use the keyword argument exc_info with a true value: + + .. code-block:: py + + logger.trace("Houston, we have an %s", "interesting problem", exc_info=1) + + Args: + msg: The message to be logged. + args, kwargs: Passed to the base log function as is. + """ + if self.isEnabledFor(TRACE_LEVEL): + self.log(TRACE_LEVEL, msg, *args, **kwargs) + + +def get_logger(name: typing.Optional[str] = None) -> CustomLogger: + """ + Utility to make mypy recognise that logger is of type `CustomLogger`. + + Args: + name: The name given to the logger. + + Returns: + An instance of the `CustomLogger` class. + """ + return typing.cast(CustomLogger, logging.getLogger(name)) |