Name | shouterlog JSON |
Version |
0.0.2
JSON |
| download |
home_page | |
Summary | A custom logging tool that expands normal logger with additional formatting and debug capabilities. |
upload_time | 2024-01-14 21:40:39 |
maintainer | |
docs_url | None |
author | Kyrylo 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"
}