
.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "auto_examples/Logging_setup.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

    .. note::
        :class: sphx-glr-download-link-note

        :ref:`Go to the end <sphx_glr_download_auto_examples_Logging_setup.py>`
        to download the full example code.

.. rst-class:: sphx-glr-example-title

.. _sphx_glr_auto_examples_Logging_setup.py:


Custom logging setup using python built-in logging functionality.
=================================================================

.. GENERATED FROM PYTHON SOURCE LINES 16-127

.. code-block:: Python


    # pylint: disable=invalid-name

    import logging
    import logging.config  # allows to specify advanced custom configurations

    import QuantumIsing_1d_quench as example


    def simple_logging_config():
        """
        Simple logging configuration via `logging.basicConfig`
        https://docs.python.org/3/library/logging.html#logging.basicConfig
        """
        logging.basicConfig(
            # tweak output format
            format="%(asctime)s [%(name)s:%(levelname)s] %(message)s",
            # ------
            # log severity INFO or higher
            level="INFO",
            # note: qtealeaves' default is to log
            # >= INFO for qtealeaves.simulation
            # >= WARNING for other modules
            # ------
            # uncomment next line to log to file
            # filename="log_file_path.log",
        )


    def advanced_logging_config():
        """
        Advanced logging configuration via `logging.config.dictConfig`
        https://docs.python.org/3/library/logging.config.html#logging.config.dictConfig
        https://docs.python.org/3/library/logging.config.html#configuration-dictionary-schema

        see also `logging.config.fileConfig`
        https://docs.python.org/3/library/logging.config.html#logging.config.fileConfig
        https://docs.python.org/3/library/logging.config.html#configuration-file-format
        """
        # A (fairly advanced) way of specifying custom logging setups
        # is through a dictionary (possibly stored in yaml/json)
        logging_config = {
            # schema version, only valid value at present is 1
            "version": 1,
            # if True (default), non-root loggers have to be listed
            # in "loggers" below in order to be active
            "disable_existing_loggers": False,  # default is True
            # configuration for the root logger, from which all loggers inherit
            "root": {
                # https://docs.python.org/3/library/logging.html#levels
                "level": "WARNING",  # python's default for root logger log
                "handlers": ["console", "file"],  # handlers defined below
            },
            # sub-loggers, inherit their configuration from the parent loggers
            # (e.g. X.Y inherits from X which inherits from the root logger)
            # but can integrate it with custom: level, propagate, filters, handlers
            "loggers": {
                # must mention explicitly if disable_existing_loggers is True
                "qtealeaves": {},
                # reproduce qtealeaves' default
                "qtealeaves.simulation": {"level": "INFO"},
                # if we are interested in the details of the emulator
                "qtealeaves.emulator": {"level": "DEBUG"},
            },
            # logging destinations (can even be a network socket or email server)
            # https://docs.python.org/3/library/logging.handlers.html
            # can specify custom: level, formatter, filters
            "handlers": {
                "file": {
                    "class": "logging.FileHandler",
                    "filename": "sim.log",
                    "mode": "w",
                    # handler-specific formatter, among those defined below
                    "formatter": "detailed",
                },
                "console": {
                    "class": "logging.StreamHandler",
                    "stream": "ext://sys.stdout",
                    "formatter": "detailed",
                    # handler-specific level, DEBUG won't go to STDOUT
                    "level": "INFO",
                },
            },
            # logging output formatting (can define many, for different handlers)
            # https://docs.python.org/3/library/logging.html#logging.Formatter
            "formatters": {
                # only messages whose severity INFO or higher
                "detailed": {
                    "format": "%(asctime)s  %(levelname)-8s | %(message)s",
                    "datefmt": "%Y-%m-%d %H:%M",
                }
            },
        }
        logging.config.dictConfig(logging_config)


    if __name__ == "__main__":
        logger = logging.getLogger("example-script")

        # qtealeaves configures logging automatically,
        # setting the level of loggers in qtealeaves.simulation to INFO
        # (set `has_log_file=True` in the example to log to file as well)

        # to tweak a bit the output, uncomment to see effect
        # simple_logging_config()

        # advanced configuration via dictionary, uncomment to see effect
        # advanced_logging_config()

        # run an example with the customized logging
        example.main()


.. _sphx_glr_download_auto_examples_Logging_setup.py:

.. only:: html

  .. container:: sphx-glr-footer sphx-glr-footer-example

    .. container:: sphx-glr-download sphx-glr-download-jupyter

      :download:`Download Jupyter notebook: Logging_setup.ipynb <Logging_setup.ipynb>`

    .. container:: sphx-glr-download sphx-glr-download-python

      :download:`Download Python source code: Logging_setup.py <Logging_setup.py>`

    .. container:: sphx-glr-download sphx-glr-download-zip

      :download:`Download zipped: Logging_setup.zip <Logging_setup.zip>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_
