| """ Module for logging and debugging""" |
| import inspect |
| from pprint import pprint |
| from typing import Any |
|
|
| class Logger(): |
| """ |
| Log class with different styled logs. |
| debugging can be enabled/disabled for the whole instance |
| """ |
|
|
| def __init__(self) -> None: |
| self.debug = False |
|
|
| def log_caller(self) -> None: |
| """Print the caller of the function""" |
| caller_frame = inspect.currentframe().f_back.f_back |
| caller_function_name = caller_frame.f_code.co_name |
| caller_self = caller_frame.f_locals.get('self', None) |
| if caller_self is not None: |
| caller_class_name = caller_self.__class__.__name__ |
| print(f"\tat: {caller_class_name}.{caller_function_name}\n") |
| else: |
| print(f"\tat: {caller_function_name}\n") |
|
|
|
|
| def debug_log(self, msg: str, debug: bool = False) -> None: |
| """Print a debug message if debugging is enabled |
| |
| Args: |
| msg (str): the message to print |
| debug (bool, optional): if True, the message will be printed regardless of the debugging state. |
| Defaults to False. |
| """ |
| if self.debug or debug: |
| print(f"\n\tDEBUG: {msg}") |
| self.log_caller() |
|
|
| def pretty_debug_log(self, msg: Any, debug: bool = False) -> None: |
| """Print a debug message with pprint if debugging is enabled |
| |
| Args: |
| msg (Any): the message to print |
| debug (bool, optional): if True, the message will be printed regardless of the debugging state. |
| """ |
| if self.debug or debug: |
| print("\n\n\n") |
| pprint(msg) |
| self.log_caller() |
|
|
|
|
| def log_info(self, msg: str) -> None: |
| """Print an info message |
| |
| Args: |
| msg (str): the message to print |
| """ |
| print(f"INFO: Batch-Checkpoint-Prompt: {msg}") |
|
|
| def debug_print_attributes(self, obj: Any, debug: bool = False) -> None: |
| """Print the attributes of an object |
| |
| Args: |
| obj (Any): the object to print the attributes from |
| """ |
| print("Atributes: ") |
| if self.debug or debug: |
| attributes = dir(obj) |
| for attribute in attributes: |
| if not attribute.startswith("__"): |
| value = getattr(obj, attribute) |
| if not callable(value): |
| try: |
| print(f"{attribute}:") |
| pprint(value) |
| except: |
| print(f"{attribute}: {value}\n") |
| print(f"\n{type(obj)}\n") |
| self.log_caller() |