shouterlog


Nameshouterlog JSON
Version 0.0.2 PyPI version JSON
download
home_page
SummaryA custom logging tool that expands normal logger with additional formatting and debug capabilities.
upload_time2024-01-14 21:40:39
maintainer
docs_urlNone
authorKyrylo Mordan
requires_python
license
keywords ['python' 'logging' 'debug tool']
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Shouter Usage Examples

The Shouter class is designed for managing and displaying formatted log messages, utilizing Python's logging module. 



```python
import sys
sys.path.append('../')
from python_modules.shouterlog import Shouter
# optional
import logging
```

## Usage examples

The examples contain: 
1. initialize Shouter class
2. basic usage like logging
3. using different output types
4. custom logger configuration
5. backwards compatibility with existing loggers
6. built-in records from Shouter usage
7. debugging capabilities of Shouter

### 1. Initialize Shouter Class


```python
shouter = Shouter(
    # optional/ required
    supported_classes = (),
    # optionally 
    ## Formatting settings
    dotline_length = 50,
    auto_output_type_selection = True,
    # For saving records
    tears_persist_path = '../env_spec/log_records.json',
    datetime_format = "%Y-%m-%d %H:%M:%S",
    # For saving env
    persist_env = False,
    env_persist_path = '../env_spec/environment.dill',
    ## Logger settings
    logger = None,
    logger_name = 'Shouter',
    loggerLvl = logging.DEBUG,
    logger_format = '(%(asctime)s) : %(name)s : [%(levelname)s] : %(message)s'
)

```

### 2. Basic usage like logging


```python
shouter.debug(
    # optional
    dotline_length=30)
shouter.debug("This is a debug message!")
shouter.info("This is an info message!")
shouter.warning("This is a warning message!")
shouter.error("This is an error message!")
shouter.fatal("This is a fatal message!")
shouter.critical("This is a critical message!")
```

    (2024-01-14 22:39:52,280) : Shouter : [DEBUG] : ==============================
    (2024-01-14 22:39:52,292) : Shouter : [DEBUG] : This is a debug message!
    (2024-01-14 22:39:52,296) : Shouter : [INFO] : This is an info message!
    (2024-01-14 22:39:52,304) : Shouter : [WARNING] : This is a warning message!
    (2024-01-14 22:39:52,307) : Shouter : [ERROR] : This is an error message!
    (2024-01-14 22:39:52,310) : Shouter : [CRITICAL] : This is a fatal message!
    (2024-01-14 22:39:52,313) : Shouter : [CRITICAL] : This is a critical message!


### 3. Using different output types


```python
# Different types of outputs
shouter.info(output_type="dline")
shouter.info(output_type="HEAD1", mess="Header Message")
```

    (2024-01-14 22:39:52,399) : Shouter : [INFO] : ==================================================
    (2024-01-14 22:39:52,402) : Shouter : [INFO] : 
    ==================================================
    -----------------Header Message----------------- 
    ==================================================


### 4. Custom logger configuration


```python
import logging

# Custom logger
custom_logger = logging.getLogger("CustomLogger")
custom_logger.setLevel(logging.INFO)

# Shouter with custom logger
shouter_with_custom_logger = Shouter(supported_classes=(), logger=custom_logger)
shouter_with_custom_logger.info(mess="Message with custom logger")
```

    (2024-01-14 22:39:52,429) : CustomLogger : [INFO] : Message with custom logger


### 5. Backwards compatibility with existing loggers


```python
import logging
import attr #>=22.2.0


@attr.s
class ExampleClass:

    # Logger settings
    logger = attr.ib(default=None)
    logger_name = attr.ib(default='Example Class')
    loggerLvl = attr.ib(default=logging.DEBUG)
    logger_format = attr.ib(default='(%(asctime)s) : %(name)s : [%(levelname)s] : %(message)s')

    def __attrs_post_init__(self):
        self.initialize_logger()

    def initialize_logger(self):

        """
        Initialize a logger for the class instance based on
        the specified logging level and logger name.
        """

        if self.logger is None:
            logging.basicConfig(level=self.loggerLvl,format=self.logger_format)
            logger = logging.getLogger(self.logger_name)
            logger.setLevel(self.loggerLvl)

            self.logger = logger
            
    def print_debug(self):
        
        self.logger.debug("This is a debug message!")
        
    def print_info(self):
        
        self.logger.info("This is a info message!")
        
    def print_warning(self):
        
        self.logger.warning("This is a warning message!")
        
    def print_error(self):
        
        self.logger.error("This is a error message!")
        
    def print_critical(self):
        
        self.logger.critical("This is a critical message!")
        
    def perform_action_chain_1(self):
        
        self.logger.debug("Action 1")
        self.print_debug()
                
        self.logger.debug("Action 2")
        self.print_error()
        
    def perform_action_chain_2(self):
                
        a = 1
        b = 'b'
        c = ['list']
        d = {'key' : 'value'}
        e = Shouter()
        
        self.logger.error("Saving env")
```


```python
ec = ExampleClass()

ec.print_debug()
ec.print_info()
ec.print_warning()
ec.print_error()
ec.print_critical()
```

    (2024-01-14 22:39:52,478) : Example Class : [DEBUG] : This is a debug message!
    (2024-01-14 22:39:52,482) : Example Class : [INFO] : This is a info message!
    (2024-01-14 22:39:52,484) : Example Class : [WARNING] : This is a warning message!
    (2024-01-14 22:39:52,486) : Example Class : [ERROR] : This is a error message!
    (2024-01-14 22:39:52,488) : Example Class : [CRITICAL] : This is a critical message!



```python
shouter_for_example_class = Shouter(
    supported_classes = (ExampleClass),
    tears_persist_path = '../env_spec/log_records.json'
    )

ec = ExampleClass(logger=shouter_for_example_class)

ec.print_debug()
ec.print_info()
ec.print_warning()
ec.print_error()
ec.print_critical()
ec.perform_action_chain_1()
```

    (2024-01-14 22:39:52,506) : Shouter : [DEBUG] : This is a debug message!
    (2024-01-14 22:39:52,508) : Shouter : [INFO] : This is a info message!
    (2024-01-14 22:39:52,510) : Shouter : [WARNING] : This is a warning message!
    (2024-01-14 22:39:52,512) : Shouter : [ERROR] : This is a error message!
    (2024-01-14 22:39:52,518) : Shouter : [CRITICAL] : This is a critical message!
    (2024-01-14 22:39:52,521) : Shouter : [DEBUG] : Action 1
    (2024-01-14 22:39:52,522) : Shouter : [DEBUG] : + This is a debug message!
    (2024-01-14 22:39:52,524) : Shouter : [DEBUG] : Action 2
    (2024-01-14 22:39:52,526) : Shouter : [ERROR] : + This is a error message!


### 6. Built-in records from Shouter usage


```python
shouter_for_example_class = Shouter(
    supported_classes = (ExampleClass),
    tears_persist_path = '../env_spec/log_records.json'
    )

ec = ExampleClass(logger=shouter_for_example_class)

ec.print_debug()
ec.perform_action_chain_1()
```

    (2024-01-14 22:39:52,551) : Shouter : [DEBUG] : This is a debug message!
    (2024-01-14 22:39:52,554) : Shouter : [DEBUG] : Action 1
    (2024-01-14 22:39:52,556) : Shouter : [DEBUG] : + This is a debug message!
    (2024-01-14 22:39:52,558) : Shouter : [DEBUG] : Action 2
    (2024-01-14 22:39:52,560) : Shouter : [ERROR] : + This is a error message!



```python
ec.logger.return_logged_tears()
```




    [{'datetime': '2024-01-14 22:39:52',
      'level': 'debug',
      'function': 'ExampleClass.print_debug',
      'mess': 'This is a debug message!',
      'line': 33,
      'lines': [33],
      'traceback': ['ExampleClass.print_debug']},
     {'datetime': '2024-01-14 22:39:52',
      'level': 'debug',
      'function': 'ExampleClass.perform_action_chain_1',
      'mess': 'Action 1',
      'line': 53,
      'lines': [53],
      'traceback': ['ExampleClass.perform_action_chain_1']},
     {'datetime': '2024-01-14 22:39:52',
      'level': 'debug',
      'function': 'ExampleClass.perform_action_chain_1',
      'mess': 'This is a debug message!',
      'line': 54,
      'lines': [33, 54],
      'traceback': ['ExampleClass.print_debug',
       'ExampleClass.perform_action_chain_1']},
     {'datetime': '2024-01-14 22:39:52',
      'level': 'debug',
      'function': 'ExampleClass.perform_action_chain_1',
      'mess': 'Action 2',
      'line': 56,
      'lines': [56],
      'traceback': ['ExampleClass.perform_action_chain_1']},
     {'datetime': '2024-01-14 22:39:52',
      'level': 'error',
      'function': 'ExampleClass.perform_action_chain_1',
      'mess': 'This is a error message!',
      'line': 57,
      'lines': [45, 57],
      'traceback': ['ExampleClass.print_error',
       'ExampleClass.perform_action_chain_1']}]




```python
import pandas as pd

pd.DataFrame(ec.logger.return_logged_tears())
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>datetime</th>
      <th>level</th>
      <th>function</th>
      <th>mess</th>
      <th>line</th>
      <th>lines</th>
      <th>traceback</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>2024-01-14 22:39:52</td>
      <td>debug</td>
      <td>ExampleClass.print_debug</td>
      <td>This is a debug message!</td>
      <td>33</td>
      <td>[33]</td>
      <td>[ExampleClass.print_debug]</td>
    </tr>
    <tr>
      <th>1</th>
      <td>2024-01-14 22:39:52</td>
      <td>debug</td>
      <td>ExampleClass.perform_action_chain_1</td>
      <td>Action 1</td>
      <td>53</td>
      <td>[53]</td>
      <td>[ExampleClass.perform_action_chain_1]</td>
    </tr>
    <tr>
      <th>2</th>
      <td>2024-01-14 22:39:52</td>
      <td>debug</td>
      <td>ExampleClass.perform_action_chain_1</td>
      <td>This is a debug message!</td>
      <td>54</td>
      <td>[33, 54]</td>
      <td>[ExampleClass.print_debug, ExampleClass.perfor...</td>
    </tr>
    <tr>
      <th>3</th>
      <td>2024-01-14 22:39:52</td>
      <td>debug</td>
      <td>ExampleClass.perform_action_chain_1</td>
      <td>Action 2</td>
      <td>56</td>
      <td>[56]</td>
      <td>[ExampleClass.perform_action_chain_1]</td>
    </tr>
    <tr>
      <th>4</th>
      <td>2024-01-14 22:39:52</td>
      <td>error</td>
      <td>ExampleClass.perform_action_chain_1</td>
      <td>This is a error message!</td>
      <td>57</td>
      <td>[45, 57]</td>
      <td>[ExampleClass.print_error, ExampleClass.perfor...</td>
    </tr>
  </tbody>
</table>
</div>



### 7. Debugging capabilities of Shouter


```python
shouter_for_example_class = Shouter(
    supported_classes = (ExampleClass),
    tears_persist_path = '../env_spec/log_records.json',
    persist_env = True,
    env_persist_path = '../env_spec/environment.dill'
)

ec = ExampleClass(logger=shouter_for_example_class)

ec.print_debug()
ec.perform_action_chain_2()
```

    (2024-01-14 22:39:53,277) : Shouter : [DEBUG] : This is a debug message!
    (2024-01-14 22:39:53,280) : Shouter : [ERROR] : Saving env
    (2024-01-14 22:39:53,348) : Shouter : [WARNING] : Object 'self' could not have been serialized, when saving last words!



```python
ec.logger.return_last_words(
    # optional
    env_persist_path = '../env_spec/environment.dill'
)
```




    {'a': 1,
     'b': 'b',
     'c': ['list'],
     'd': {'key': 'value'},
     'e': Shouter(supported_classes=(), dotline_length=50, auto_output_type_selection=True, tears_persist_path='log_records.json', env_persist_path='environment.dill', datetime_format='%Y-%m-%d %H:%M:%S', log_records=[], persist_env=False, logger=<Logger Shouter (DEBUG)>, logger_name='Shouter', loggerLvl=10, logger_format='(%(asctime)s) : %(name)s : [%(levelname)s] : %(message)s')}



            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "shouterlog",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "['python','logging','debug tool']",
    "author": "Kyrylo Mordan",
    "author_email": "parachute.repo@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/6f/bf/2f3c2daffdda6c9768b80a679407d23e6ca268a30b9430bebddbc95217c7/shouterlog-0.0.2.tar.gz",
    "platform": null,
    "description": "# Shouter Usage Examples\n\nThe Shouter class is designed for managing and displaying formatted log messages, utilizing Python's logging module. \n\n\n\n```python\nimport sys\nsys.path.append('../')\nfrom python_modules.shouterlog import Shouter\n# optional\nimport logging\n```\n\n## Usage examples\n\nThe examples contain: \n1. initialize Shouter class\n2. basic usage like logging\n3. using different output types\n4. custom logger configuration\n5. backwards compatibility with existing loggers\n6. built-in records from Shouter usage\n7. debugging capabilities of Shouter\n\n### 1. Initialize Shouter Class\n\n\n```python\nshouter = Shouter(\n    # optional/ required\n    supported_classes = (),\n    # optionally \n    ## Formatting settings\n    dotline_length = 50,\n    auto_output_type_selection = True,\n    # For saving records\n    tears_persist_path = '../env_spec/log_records.json',\n    datetime_format = \"%Y-%m-%d %H:%M:%S\",\n    # For saving env\n    persist_env = False,\n    env_persist_path = '../env_spec/environment.dill',\n    ## Logger settings\n    logger = None,\n    logger_name = 'Shouter',\n    loggerLvl = logging.DEBUG,\n    logger_format = '(%(asctime)s) : %(name)s : [%(levelname)s] : %(message)s'\n)\n\n```\n\n### 2. Basic usage like logging\n\n\n```python\nshouter.debug(\n    # optional\n    dotline_length=30)\nshouter.debug(\"This is a debug message!\")\nshouter.info(\"This is an info message!\")\nshouter.warning(\"This is a warning message!\")\nshouter.error(\"This is an error message!\")\nshouter.fatal(\"This is a fatal message!\")\nshouter.critical(\"This is a critical message!\")\n```\n\n    (2024-01-14 22:39:52,280) : Shouter : [DEBUG] : ==============================\n    (2024-01-14 22:39:52,292) : Shouter : [DEBUG] : This is a debug message!\n    (2024-01-14 22:39:52,296) : Shouter : [INFO] : This is an info message!\n    (2024-01-14 22:39:52,304) : Shouter : [WARNING] : This is a warning message!\n    (2024-01-14 22:39:52,307) : Shouter : [ERROR] : This is an error message!\n    (2024-01-14 22:39:52,310) : Shouter : [CRITICAL] : This is a fatal message!\n    (2024-01-14 22:39:52,313) : Shouter : [CRITICAL] : This is a critical message!\n\n\n### 3. Using different output types\n\n\n```python\n# Different types of outputs\nshouter.info(output_type=\"dline\")\nshouter.info(output_type=\"HEAD1\", mess=\"Header Message\")\n```\n\n    (2024-01-14 22:39:52,399) : Shouter : [INFO] : ==================================================\n    (2024-01-14 22:39:52,402) : Shouter : [INFO] : \n    ==================================================\n    -----------------Header Message----------------- \n    ==================================================\n\n\n### 4. Custom logger configuration\n\n\n```python\nimport logging\n\n# Custom logger\ncustom_logger = logging.getLogger(\"CustomLogger\")\ncustom_logger.setLevel(logging.INFO)\n\n# Shouter with custom logger\nshouter_with_custom_logger = Shouter(supported_classes=(), logger=custom_logger)\nshouter_with_custom_logger.info(mess=\"Message with custom logger\")\n```\n\n    (2024-01-14 22:39:52,429) : CustomLogger : [INFO] : Message with custom logger\n\n\n### 5. Backwards compatibility with existing loggers\n\n\n```python\nimport logging\nimport attr #>=22.2.0\n\n\n@attr.s\nclass ExampleClass:\n\n    # Logger settings\n    logger = attr.ib(default=None)\n    logger_name = attr.ib(default='Example Class')\n    loggerLvl = attr.ib(default=logging.DEBUG)\n    logger_format = attr.ib(default='(%(asctime)s) : %(name)s : [%(levelname)s] : %(message)s')\n\n    def __attrs_post_init__(self):\n        self.initialize_logger()\n\n    def initialize_logger(self):\n\n        \"\"\"\n        Initialize a logger for the class instance based on\n        the specified logging level and logger name.\n        \"\"\"\n\n        if self.logger is None:\n            logging.basicConfig(level=self.loggerLvl,format=self.logger_format)\n            logger = logging.getLogger(self.logger_name)\n            logger.setLevel(self.loggerLvl)\n\n            self.logger = logger\n            \n    def print_debug(self):\n        \n        self.logger.debug(\"This is a debug message!\")\n        \n    def print_info(self):\n        \n        self.logger.info(\"This is a info message!\")\n        \n    def print_warning(self):\n        \n        self.logger.warning(\"This is a warning message!\")\n        \n    def print_error(self):\n        \n        self.logger.error(\"This is a error message!\")\n        \n    def print_critical(self):\n        \n        self.logger.critical(\"This is a critical message!\")\n        \n    def perform_action_chain_1(self):\n        \n        self.logger.debug(\"Action 1\")\n        self.print_debug()\n                \n        self.logger.debug(\"Action 2\")\n        self.print_error()\n        \n    def perform_action_chain_2(self):\n                \n        a = 1\n        b = 'b'\n        c = ['list']\n        d = {'key' : 'value'}\n        e = Shouter()\n        \n        self.logger.error(\"Saving env\")\n```\n\n\n```python\nec = ExampleClass()\n\nec.print_debug()\nec.print_info()\nec.print_warning()\nec.print_error()\nec.print_critical()\n```\n\n    (2024-01-14 22:39:52,478) : Example Class : [DEBUG] : This is a debug message!\n    (2024-01-14 22:39:52,482) : Example Class : [INFO] : This is a info message!\n    (2024-01-14 22:39:52,484) : Example Class : [WARNING] : This is a warning message!\n    (2024-01-14 22:39:52,486) : Example Class : [ERROR] : This is a error message!\n    (2024-01-14 22:39:52,488) : Example Class : [CRITICAL] : This is a critical message!\n\n\n\n```python\nshouter_for_example_class = Shouter(\n    supported_classes = (ExampleClass),\n    tears_persist_path = '../env_spec/log_records.json'\n    )\n\nec = ExampleClass(logger=shouter_for_example_class)\n\nec.print_debug()\nec.print_info()\nec.print_warning()\nec.print_error()\nec.print_critical()\nec.perform_action_chain_1()\n```\n\n    (2024-01-14 22:39:52,506) : Shouter : [DEBUG] : This is a debug message!\n    (2024-01-14 22:39:52,508) : Shouter : [INFO] : This is a info message!\n    (2024-01-14 22:39:52,510) : Shouter : [WARNING] : This is a warning message!\n    (2024-01-14 22:39:52,512) : Shouter : [ERROR] : This is a error message!\n    (2024-01-14 22:39:52,518) : Shouter : [CRITICAL] : This is a critical message!\n    (2024-01-14 22:39:52,521) : Shouter : [DEBUG] : Action 1\n    (2024-01-14 22:39:52,522) : Shouter : [DEBUG] : + This is a debug message!\n    (2024-01-14 22:39:52,524) : Shouter : [DEBUG] : Action 2\n    (2024-01-14 22:39:52,526) : Shouter : [ERROR] : + This is a error message!\n\n\n### 6. Built-in records from Shouter usage\n\n\n```python\nshouter_for_example_class = Shouter(\n    supported_classes = (ExampleClass),\n    tears_persist_path = '../env_spec/log_records.json'\n    )\n\nec = ExampleClass(logger=shouter_for_example_class)\n\nec.print_debug()\nec.perform_action_chain_1()\n```\n\n    (2024-01-14 22:39:52,551) : Shouter : [DEBUG] : This is a debug message!\n    (2024-01-14 22:39:52,554) : Shouter : [DEBUG] : Action 1\n    (2024-01-14 22:39:52,556) : Shouter : [DEBUG] : + This is a debug message!\n    (2024-01-14 22:39:52,558) : Shouter : [DEBUG] : Action 2\n    (2024-01-14 22:39:52,560) : Shouter : [ERROR] : + This is a error message!\n\n\n\n```python\nec.logger.return_logged_tears()\n```\n\n\n\n\n    [{'datetime': '2024-01-14 22:39:52',\n      'level': 'debug',\n      'function': 'ExampleClass.print_debug',\n      'mess': 'This is a debug message!',\n      'line': 33,\n      'lines': [33],\n      'traceback': ['ExampleClass.print_debug']},\n     {'datetime': '2024-01-14 22:39:52',\n      'level': 'debug',\n      'function': 'ExampleClass.perform_action_chain_1',\n      'mess': 'Action 1',\n      'line': 53,\n      'lines': [53],\n      'traceback': ['ExampleClass.perform_action_chain_1']},\n     {'datetime': '2024-01-14 22:39:52',\n      'level': 'debug',\n      'function': 'ExampleClass.perform_action_chain_1',\n      'mess': 'This is a debug message!',\n      'line': 54,\n      'lines': [33, 54],\n      'traceback': ['ExampleClass.print_debug',\n       'ExampleClass.perform_action_chain_1']},\n     {'datetime': '2024-01-14 22:39:52',\n      'level': 'debug',\n      'function': 'ExampleClass.perform_action_chain_1',\n      'mess': 'Action 2',\n      'line': 56,\n      'lines': [56],\n      'traceback': ['ExampleClass.perform_action_chain_1']},\n     {'datetime': '2024-01-14 22:39:52',\n      'level': 'error',\n      'function': 'ExampleClass.perform_action_chain_1',\n      'mess': 'This is a error message!',\n      'line': 57,\n      'lines': [45, 57],\n      'traceback': ['ExampleClass.print_error',\n       'ExampleClass.perform_action_chain_1']}]\n\n\n\n\n```python\nimport pandas as pd\n\npd.DataFrame(ec.logger.return_logged_tears())\n```\n\n\n\n\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>datetime</th>\n      <th>level</th>\n      <th>function</th>\n      <th>mess</th>\n      <th>line</th>\n      <th>lines</th>\n      <th>traceback</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>2024-01-14 22:39:52</td>\n      <td>debug</td>\n      <td>ExampleClass.print_debug</td>\n      <td>This is a debug message!</td>\n      <td>33</td>\n      <td>[33]</td>\n      <td>[ExampleClass.print_debug]</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>2024-01-14 22:39:52</td>\n      <td>debug</td>\n      <td>ExampleClass.perform_action_chain_1</td>\n      <td>Action 1</td>\n      <td>53</td>\n      <td>[53]</td>\n      <td>[ExampleClass.perform_action_chain_1]</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>2024-01-14 22:39:52</td>\n      <td>debug</td>\n      <td>ExampleClass.perform_action_chain_1</td>\n      <td>This is a debug message!</td>\n      <td>54</td>\n      <td>[33, 54]</td>\n      <td>[ExampleClass.print_debug, ExampleClass.perfor...</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>2024-01-14 22:39:52</td>\n      <td>debug</td>\n      <td>ExampleClass.perform_action_chain_1</td>\n      <td>Action 2</td>\n      <td>56</td>\n      <td>[56]</td>\n      <td>[ExampleClass.perform_action_chain_1]</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>2024-01-14 22:39:52</td>\n      <td>error</td>\n      <td>ExampleClass.perform_action_chain_1</td>\n      <td>This is a error message!</td>\n      <td>57</td>\n      <td>[45, 57]</td>\n      <td>[ExampleClass.print_error, ExampleClass.perfor...</td>\n    </tr>\n  </tbody>\n</table>\n</div>\n\n\n\n### 7. Debugging capabilities of Shouter\n\n\n```python\nshouter_for_example_class = Shouter(\n    supported_classes = (ExampleClass),\n    tears_persist_path = '../env_spec/log_records.json',\n    persist_env = True,\n    env_persist_path = '../env_spec/environment.dill'\n)\n\nec = ExampleClass(logger=shouter_for_example_class)\n\nec.print_debug()\nec.perform_action_chain_2()\n```\n\n    (2024-01-14 22:39:53,277) : Shouter : [DEBUG] : This is a debug message!\n    (2024-01-14 22:39:53,280) : Shouter : [ERROR] : Saving env\n    (2024-01-14 22:39:53,348) : Shouter : [WARNING] : Object 'self' could not have been serialized, when saving last words!\n\n\n\n```python\nec.logger.return_last_words(\n    # optional\n    env_persist_path = '../env_spec/environment.dill'\n)\n```\n\n\n\n\n    {'a': 1,\n     'b': 'b',\n     'c': ['list'],\n     'd': {'key': 'value'},\n     'e': Shouter(supported_classes=(), dotline_length=50, auto_output_type_selection=True, tears_persist_path='log_records.json', env_persist_path='environment.dill', datetime_format='%Y-%m-%d %H:%M:%S', log_records=[], persist_env=False, logger=<Logger Shouter (DEBUG)>, logger_name='Shouter', loggerLvl=10, logger_format='(%(asctime)s) : %(name)s : [%(levelname)s] : %(message)s')}\n\n\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "A custom logging tool that expands normal logger with additional formatting and debug capabilities.",
    "version": "0.0.2",
    "project_urls": null,
    "split_keywords": [
        "['python'",
        "'logging'",
        "'debug tool']"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "79973d46098684be11ba1523300e4c9d2b344a6d505bf9348dc2ece31fb1726f",
                "md5": "ad176d707a28f882b7895c5b7f7675e6",
                "sha256": "5a10dd77b7a2ab0e77dfe002f664a674de212f157ed38639e83a102b479d00c2"
            },
            "downloads": -1,
            "filename": "shouterlog-0.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "ad176d707a28f882b7895c5b7f7675e6",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 8799,
            "upload_time": "2024-01-14T21:40:37",
            "upload_time_iso_8601": "2024-01-14T21:40:37.553270Z",
            "url": "https://files.pythonhosted.org/packages/79/97/3d46098684be11ba1523300e4c9d2b344a6d505bf9348dc2ece31fb1726f/shouterlog-0.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6fbf2f3c2daffdda6c9768b80a679407d23e6ca268a30b9430bebddbc95217c7",
                "md5": "ff292fcf8f11c00d14b4ed0b2719a257",
                "sha256": "986f6626b094c740c6168fffc4ffc6bf7dfcc790682fab370e2054f7ab39db2d"
            },
            "downloads": -1,
            "filename": "shouterlog-0.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "ff292fcf8f11c00d14b4ed0b2719a257",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 12778,
            "upload_time": "2024-01-14T21:40:39",
            "upload_time_iso_8601": "2024-01-14T21:40:39.515544Z",
            "url": "https://files.pythonhosted.org/packages/6f/bf/2f3c2daffdda6c9768b80a679407d23e6ca268a30b9430bebddbc95217c7/shouterlog-0.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-01-14 21:40:39",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "shouterlog"
}
        
Elapsed time: 0.19587s