{ "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 }