Skip to content
Snippets Groups Projects
Commit 71473d16 authored by Felipe Delestro Matos's avatar Felipe Delestro Matos
Browse files

added log level selector

parent c6cdfd78
No related branches found
No related tags found
No related merge requests found
......@@ -15,3 +15,6 @@ build/
*.swo
*.pyc
*~
# Notebook checkpoints
.ipynb_checkpoints/
%% Cell type:markdown id:ae2a75fe tags:
# Logging system for qim3d
Using proper logging instead of print statements is a recommended practice.
While print statements can be helpful for quick debugging, logging provides a more powerful and versatile approach. Logging allows for better control over output, with options to configure log levels, filter messages, and redirect output to different destinations.
%% Cell type:code id:a31b2245 tags:
``` python
import qim3d
from qim3d.io.logger import log
```
%% Cell type:code id:94022824 tags:
``` python
# Here we test by sending one message for each level
# Note that DEBUG and INFO do not appear
log.debug('debug level message')
log.info('info level message')
log.warning('warning level message')
log.error('error level message')
log.critical('critical level message')
```
%% Output
warning level message
error level message
critical level message
%% Cell type:code id:b0856333 tags:
``` python
# Change the level to debug
qim3d.io.logger.set_level_DEBUG()
# Now all the levels get logged
log.debug('debug level message')
log.info('info level message')
log.warning('warning level message')
log.error('error level message')
log.critical('critical level message')
```
%% Output
debug level message
info level message
warning level message
error level message
critical level message
%% Cell type:code id:eb542404 tags:
``` python
# Change the level to error
qim3d.io.logger.set_level_ERROR()
# And now only above ERROR is shown
log.debug('debug level message')
log.info('info level message')
log.warning('warning level message')
log.error('error level message')
log.critical('critical level message')
```
%% Output
error level message
critical level message
%% Cell type:code id:af3cc812 tags:
``` python
# We can increase the level of detail
qim3d.io.logger.set_detailed_output()
# Note that DEBUG and INFO are still not shown
log.debug('debug level message')
log.info('info level message')
log.warning('warning level message')
log.error('error level message')
log.critical('critical level message')
```
%% Output
ERROR 3224913348.py:8 error level message
CRITICAL 3224913348.py:9 critical level message
%% Cell type:code id:d7239b1b tags:
``` python
# We can switch back to the simple output mode
qim3d.io.logger.set_simple_output()
# Now we see all the levels on simple mode
log.debug('debug level message')
log.info('info level message')
log.warning('warning level message')
log.error('error level message')
log.critical('critical level message')
```
%% Output
error level message
critical level message
%% Cell type:code id:eaceb5b6 tags:
``` python
# Change back to detailed and DEBUG level
qim3d.io.logger.set_detailed_output()
qim3d.io.logger.set_level_DEBUG()
log.debug('debug level message')
log.info('info level message')
log.warning('warning level message')
log.error('error level message')
log.critical('critical level message')
```
%% Output
DEBUG 4221232047.py:5 debug level message
INFO 4221232047.py:6 info level message
WARNING 4221232047.py:7 warning level message
ERROR 4221232047.py:8 error level message
CRITICAL 4221232047.py:9 critical level message
%% Cell type:markdown id:ae2a75fe tags:
# Logging system for qim3d
Using proper logging instead of print statements is a recommended practice.
While print statements can be helpful for quick debugging, logging provides a more powerful and versatile approach. Logging allows for better control over output, with options to configure log levels, filter messages, and redirect output to different destinations.
%% Cell type:code id:a31b2245 tags:
``` python
import qim3d
from qim3d.io.logger import log
```
%% Cell type:code id:94022824 tags:
``` python
# Here we test by sending one message for each level
# Note that DEBUG and INFO do not appear
log.debug('debug level message')
log.info('info level message')
log.warning('warning level message')
log.error('error level message')
log.critical('critical level message')
```
%% Output
warning level message
error level message
critical level message
%% Cell type:code id:b0856333 tags:
``` python
# Change the level to debug
qim3d.io.logger.set_level_DEBUG()
qim3d.io.logger.level("debug")
# Now all the levels get logged
log.debug('debug level message')
log.info('info level message')
log.warning('warning level message')
log.error('error level message')
log.critical('critical level message')
```
%% Output
debug level message
info level message
warning level message
error level message
critical level message
%% Cell type:code id:eb542404 tags:
``` python
# Change the level to error
qim3d.io.logger.set_level_ERROR()
qim3d.io.logger.level("error")
# And now only above ERROR is shown
log.debug('debug level message')
log.info('info level message')
log.warning('warning level message')
log.error('error level message')
log.critical('critical level message')
```
%% Output
error level message
critical level message
%% Cell type:code id:af3cc812 tags:
``` python
# We can increase the level of detail
qim3d.io.logger.set_detailed_output()
# Note that DEBUG and INFO are still not shown
log.debug('debug level message')
log.info('info level message')
log.warning('warning level message')
log.error('error level message')
log.critical('critical level message')
```
%% Output
ERROR 3224913348.py:8 error level message
CRITICAL 3224913348.py:9 critical level message
%% Cell type:code id:d7239b1b tags:
``` python
# We can switch back to the simple output mode
qim3d.io.logger.set_simple_output()
# Now we see all the levels on simple mode
log.debug('debug level message')
log.info('info level message')
log.warning('warning level message')
log.error('error level message')
log.critical('critical level message')
```
%% Output
error level message
critical level message
%% Cell type:code id:eaceb5b6 tags:
``` python
# Change back to detailed and DEBUG level
qim3d.io.logger.set_detailed_output()
qim3d.io.logger.set_level_DEBUG()
qim3d.io.logger.level("debug")
log.debug('debug level message')
log.info('info level message')
log.warning('warning level message')
log.error('error level message')
log.critical('critical level message')
```
%% Output
DEBUG 4221232047.py:5 debug level message
INFO 4221232047.py:6 info level message
WARNING 4221232047.py:7 warning level message
ERROR 4221232047.py:8 error level message
CRITICAL 4221232047.py:9 critical level message
DEBUG 1186198911.py:5 debug level message
INFO 1186198911.py:6 info level message
WARNING 1186198911.py:7 warning level message
ERROR 1186198911.py:8 error level message
CRITICAL 1186198911.py:9 critical level message
......
......@@ -41,6 +41,45 @@ def set_level_CRITICAL():
logging.getLogger("qim3d").setLevel(logging.CRITICAL)
def level(level):
"""Set the logging level based on the specified level.
Args:
level (str or int): The logging level to set. It can be one of the following:
- "DEBUG" or "debug": Set the logging level to DEBUG.
- "INFO" or "info": Set the logging level to INFO.
- "WARNING" or "warning": Set the logging level to WARNING.
- "ERROR" or "error": Set the logging level to ERROR.
- "CRITICAL" or "critical": Set the logging level to CRITICAL.
- int: Set the logging level using the numeric value of the level (e.g., logging.DEBUG).
Raises:
ValueError: If the specified level is not a valid logging level.
"""
if level in ["DEBUG", "debug"]:
set_level_DEBUG()
elif level in ["INFO", "info"]:
set_level_INFO()
elif level in ["WARNING", "warning"]:
set_level_WARNING()
elif level in ["ERROR", "error"]:
set_level_ERROR()
elif level in ["CRITICAL", "critical"]:
set_level_CRITICAL()
elif isinstance(level, int):
logging.getLogger("qim3d").setLevel(level)
else:
raise ValueError(
f"Invalid logging level: '{level}'.\nPlease use 'debug', 'info', 'warning', 'error', 'critical' or an int."
)
# create the logger
log = logging.getLogger("qim3d")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment