diff --git a/docs/notebooks/.ipynb_checkpoints/Logging-checkpoint.ipynb b/docs/notebooks/.ipynb_checkpoints/Logging-checkpoint.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..f5f70327dd168af03ed0fbc60efc762872271e63 --- /dev/null +++ b/docs/notebooks/.ipynb_checkpoints/Logging-checkpoint.ipynb @@ -0,0 +1,220 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "ae2a75fe", + "metadata": {}, + "source": [ + "# Logging system for qim3d\n", + "\n", + "Using proper logging instead of print statements is a recommended practice.\n", + "\n", + "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. \n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a31b2245", + "metadata": { + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import qim3d\n", + "from qim3d.io.logger import log" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "94022824", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "warning level message\n", + "error level message\n", + "critical level message\n" + ] + } + ], + "source": [ + "# Here we test by sending one message for each level\n", + "# Note that DEBUG and INFO do not appear\n", + "log.debug('debug level message')\n", + "log.info('info level message')\n", + "log.warning('warning level message')\n", + "log.error('error level message')\n", + "log.critical('critical level message')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "b0856333", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "debug level message\n", + "info level message\n", + "warning level message\n", + "error level message\n", + "critical level message\n" + ] + } + ], + "source": [ + "# Change the level to debug\n", + "qim3d.io.logger.set_level_DEBUG()\n", + "\n", + "# Now all the levels get logged\n", + "log.debug('debug level message')\n", + "log.info('info level message')\n", + "log.warning('warning level message')\n", + "log.error('error level message')\n", + "log.critical('critical level message')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "eb542404", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "error level message\n", + "critical level message\n" + ] + } + ], + "source": [ + "# Change the level to error\n", + "qim3d.io.logger.set_level_ERROR()\n", + "\n", + "# And now only above ERROR is shown\n", + "log.debug('debug level message')\n", + "log.info('info level message')\n", + "log.warning('warning level message')\n", + "log.error('error level message')\n", + "log.critical('critical level message')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "af3cc812", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "ERROR 3224913348.py:8 error level message\n", + "CRITICAL 3224913348.py:9 critical level message\n" + ] + } + ], + "source": [ + "# We can increase the level of detail\n", + "qim3d.io.logger.set_detailed_output()\n", + "\n", + "# Note that DEBUG and INFO are still not shown\n", + "log.debug('debug level message')\n", + "log.info('info level message')\n", + "log.warning('warning level message')\n", + "log.error('error level message')\n", + "log.critical('critical level message')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "d7239b1b", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "error level message\n", + "critical level message\n" + ] + } + ], + "source": [ + "# We can switch back to the simple output mode\n", + "qim3d.io.logger.set_simple_output()\n", + "\n", + "# Now we see all the levels on simple mode\n", + "log.debug('debug level message')\n", + "log.info('info level message')\n", + "log.warning('warning level message')\n", + "log.error('error level message')\n", + "log.critical('critical level message')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "eaceb5b6", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG 4221232047.py:5 debug level message\n", + "INFO 4221232047.py:6 info level message\n", + "WARNING 4221232047.py:7 warning level message\n", + "ERROR 4221232047.py:8 error level message\n", + "CRITICAL 4221232047.py:9 critical level message\n" + ] + } + ], + "source": [ + "# Change back to detailed and DEBUG level\n", + "qim3d.io.logger.set_detailed_output()\n", + "qim3d.io.logger.set_level_DEBUG()\n", + "\n", + "log.debug('debug level message')\n", + "log.info('info level message')\n", + "log.warning('warning level message')\n", + "log.error('error level message')\n", + "log.critical('critical level message')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/notebooks/Logging.ipynb b/docs/notebooks/Logging.ipynb index e88aa9aa413d771987614bb850d34fd00dcf9437..f5f70327dd168af03ed0fbc60efc762872271e63 100644 --- a/docs/notebooks/Logging.ipynb +++ b/docs/notebooks/Logging.ipynb @@ -25,7 +25,7 @@ "outputs": [], "source": [ "import qim3d\n", - "from qim3d import log" + "from qim3d.io.logger import log" ] }, { diff --git a/qim3d/__init__.py b/qim3d/__init__.py index 52c04ab353f95df7e0ef7b22f5d850f29ead3ba2..87f2e56bcdf35575e4ca389348502825e6b6dd07 100644 --- a/qim3d/__init__.py +++ b/qim3d/__init__.py @@ -3,8 +3,3 @@ import qim3d.gui import qim3d.tools import logging - -# create the logger -log = logging.getLogger(__name__) -qim3d.io.logger.set_simple_output() -qim3d.io.logger.set_level_WARNING() \ No newline at end of file diff --git a/qim3d/gui/data_explorer.py b/qim3d/gui/data_explorer.py index 425ecfb82e457a861bd22e48b4cac762091d096b..0fa53af66707cc549e538f9cb1b1015b1098ca7f 100644 --- a/qim3d/gui/data_explorer.py +++ b/qim3d/gui/data_explorer.py @@ -3,7 +3,7 @@ import numpy as np import os from qim3d.tools import internal_tools from qim3d.io import DataLoader -from qim3d import log +from qim3d.io.logger import log import tifffile import outputformat as ouf import datetime diff --git a/qim3d/gui/iso3d.py b/qim3d/gui/iso3d.py index 904a6ed474c2c46333ccabbc8a9e6266990a4a74..5e1571913d9897243d685e1f38ca8753b3a509c8 100644 --- a/qim3d/gui/iso3d.py +++ b/qim3d/gui/iso3d.py @@ -3,7 +3,7 @@ import numpy as np import os from qim3d.tools import internal_tools from qim3d.io import DataLoader -from qim3d import log +from qim3d.io.logger import log import plotly.graph_objects as go from scipy import ndimage diff --git a/qim3d/gui/local_thickness.py b/qim3d/gui/local_thickness.py index d56430147f176bf6aa1841687449210da0bf8c3a..5107b0ecf61aa32c11bda47f084723471d0ab8f5 100644 --- a/qim3d/gui/local_thickness.py +++ b/qim3d/gui/local_thickness.py @@ -3,7 +3,7 @@ import numpy as np import os from qim3d.tools import internal_tools from qim3d.io import DataLoader -from qim3d import log +from qim3d.io.logger import log import tifffile import plotly.express as px from scipy import ndimage diff --git a/qim3d/io/load.py b/qim3d/io/load.py index 8ed2ec90d09dc187f007d3d9af9ade24fa9a406f..3c6a8bfe0f42174ece09cca4c298433a67fb7aea 100644 --- a/qim3d/io/load.py +++ b/qim3d/io/load.py @@ -6,13 +6,13 @@ import difflib class DataLoader: def __init__(self, **kwargs): - self.verbose = False # Virtual stack is False by default self.virtual_stack = kwargs.get("virtual_stack", False) def load_tiff(self, path): if self.virtual_stack: + log.info("Using virtual stack") vol = tifffile.memmap(path) else: vol = tifffile.imread(path) diff --git a/qim3d/io/logger.py b/qim3d/io/logger.py index 4e7013a178fcfb14ee66bf60cc0605f4317bc5f8..d81774feb633bc61b8556c6b0300a4ed6b80de39 100644 --- a/qim3d/io/logger.py +++ b/qim3d/io/logger.py @@ -39,3 +39,10 @@ def set_level_ERROR(): def set_level_CRITICAL(): logging.getLogger("qim3d").setLevel(logging.CRITICAL) + + + +# create the logger +log = logging.getLogger("qim3d") +set_simple_output() +set_level_WARNING()