diff --git a/docs/notebooks/Logging.ipynb b/docs/notebooks/Logging.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..62b4291815abf605fe88b74a35b8ec9bf7e455f0 --- /dev/null +++ b/docs/notebooks/Logging.ipynb @@ -0,0 +1,221 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "24c15e5d", + "metadata": {}, + "source": [ + "# Logging system for qim3d\n", + "Using proper logging instead of print statements is a recommended practice in software development for a variety of reasons. \n", + "\n", + "While print statements can be helpful for quick debugging, logging provides a more powerful and versatile approach. \n", + "\n", + "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", + "log = qim3d.log" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8a2b7c0e", + "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": "2824aa8a", + "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": "20857afc", + "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 +}