From 87edc7a14998f609d6651793d6eceb5b8c3218cc Mon Sep 17 00:00:00 2001 From: Diego Ferigo Date: Wed, 19 Oct 2022 10:09:17 +0200 Subject: [PATCH 1/2] Add custom logging support --- src/rod/__init__.py | 1 + src/rod/logging.py | 82 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 src/rod/logging.py diff --git a/src/rod/__init__.py b/src/rod/__init__.py index 4a79c48..3f7cce9 100644 --- a/src/rod/__init__.py +++ b/src/rod/__init__.py @@ -1,3 +1,4 @@ +from . import logging from .collision import Collision from .common import Pose, Xyz from .geometry import ( diff --git a/src/rod/logging.py b/src/rod/logging.py new file mode 100644 index 0000000..bd70791 --- /dev/null +++ b/src/rod/logging.py @@ -0,0 +1,82 @@ +import enum +import logging +from typing import Union + +import coloredlogs + +LOGGER_NAME = "rod" + + +class LoggingLevel(enum.IntEnum): + + NOTSET = logging.NOTSET + DEBUG = logging.DEBUG + INFO = logging.INFO + WARNING = logging.WARNING + ERROR = logging.ERROR + CRITICAL = logging.CRITICAL + + +def _logger() -> logging.Logger: + + return logging.getLogger(name=LOGGER_NAME) + + +def set_logging_level(level: Union[int, LoggingLevel] = LoggingLevel.WARNING): + + if isinstance(level, int): + level = LoggingLevel(level) + + _logger().setLevel(level=level.value) + + +def get_logging_level() -> LoggingLevel: + + level = _logger().getEffectiveLevel() + return LoggingLevel(level) + + +def configure(level: LoggingLevel = LoggingLevel.WARNING) -> None: + + info(f"Configuring the '{LOGGER_NAME}' logger") + + handler = logging.StreamHandler() + fmt = "%(name)s[%(process)d] %(levelname)s %(message)s" + handler.setFormatter(fmt=coloredlogs.ColoredFormatter(fmt=fmt)) + _logger().addHandler(hdlr=handler) + + # Workaround for double logging caused by abseil handlers + # https://github.com/abseil/abseil-py/issues/99 + _logger().propagate = False + + set_logging_level(level=level) + + +def debug(msg: str = "") -> None: + + _logger().debug(msg=msg) + + +def info(msg: str = "") -> None: + + _logger().info(msg=msg) + + +def warning(msg: str = "") -> None: + + _logger().warning(msg=msg) + + +def error(msg: str = "") -> None: + + _logger().error(msg=msg) + + +def critical(msg: str = "") -> None: + + _logger().critical(msg=msg) + + +def exception(msg: str = "") -> None: + + _logger().exception(msg=msg) From b81fc179bcb6b283493944b3417f3e260e71f45a Mon Sep 17 00:00:00 2001 From: Diego Ferigo Date: Wed, 19 Oct 2022 10:21:24 +0200 Subject: [PATCH 2/2] Add coloredlogs dependency --- setup.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.cfg b/setup.cfg index c5717d9..fdc3a8d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -55,6 +55,7 @@ package_dir = =src python_requires = >=3.8 install_requires = + coloredlogs mashumaro numpy packaging