Source code for autonomy_toolkit.utils.logger
# SPDX-License-Identifier: MIT
"""
Provides a custom logger object.
Should be used like the following:
.. highlight:: python
.. code-block:: python
from autonomy_toolkit.utils.logger import LOGGER
LOGGER.fatal("Fatal")
LOGGER.error("Error")
LOGGER.warn("Warning")
LOGGER.info("Information")
LOGGER.debug("Debug")
"""
import logging
from colorlog import ColoredFormatter
# Create logger
LOGGER = logging.getLogger(__name__)
# Create a handler with the desired format
DEFAULT_LOGGING_FORMAT = "%(log_color)s%(levelname)-8s%(reset)s | %(log_color)s%(module)s.%(funcName)s :: %(message)s%(reset)s"
CONSOLE_HANDLER = logging.StreamHandler()
CONSOLE_HANDLER.setFormatter(ColoredFormatter(DEFAULT_LOGGING_FORMAT))
# Set default logging levels
DEFAULT_LOGGING_LEVEL = logging.WARNING
CONSOLE_HANDLER.setLevel(DEFAULT_LOGGING_LEVEL)
LOGGER.setLevel(DEFAULT_LOGGING_LEVEL)
# Add the handler to the logger
LOGGER.addHandler(CONSOLE_HANDLER)
[docs]
def set_verbosity(verbosity: int):
"""
Set the verbosity level for the logger.
Default verbosity is WARNING. ``verbosity`` should be a value
greater than 0 and less than 2 that represents how many levels below WARNING is desired.
For instance, if ``verbosity`` is 1, the new level will be INFO because
that is one below WARNING. If ``verbosity`` is 2, the new level is DEBUG.
DEBUG and INFO are currently the only two implemented
Args:
verbosity (int): A value between 0 and 2 that represents the number of levels below WARNING that should be used when logging.
"""
if verbosity < 0 or verbosity > 2:
raise ValueError(
f"Verbosity should be greater than 0 and less than 3. Got {verbosity}."
)
level = DEFAULT_LOGGING_LEVEL - verbosity * 10
LOGGER.setLevel(level)
CONSOLE_HANDLER.setLevel(level)
LOGGER.log(level, f"Verbosity has been set to {logging.getLevelName(level)}")
[docs]
def dumps_dict(dic: dict) -> str:
"""
Dumps a dictionary in a pretty-ish format to the logger.
Args:
dic (dict): The dictionary to print
Returns:
str: The pretty-ish string representation of the dict argument
"""
import json
return json.dumps(dic, indent=4)