Using the @logged decorator — Autologging 1.0.0 documentation

# Using the `@logged` decorator

Release: | 1.0.0

- Add a module-named logger to a class
- Add a user-named logger to a class
- Add a logger to a nested class
- Add a module-named logger to a function
- Add a user-named logger to a function
- Add a logger to a nested function

## Add a module-named logger to a class

    # my_module.py

    from autologging import logged

    @logged
    class MyClass:

        @staticmethod
        def my_staticmethod():
            MyClass.__log.info("my message")

        @classmethod
        def my_classmethod(cls):
            cls.__log.info("my message")

        def my_method(self):
            self.__log.info("my message")

    >>> import logging, sys
    >>> logging.basicConfig(
    ...     level=logging.INFO, stream=sys.stdout,
    ...     format="%(levelname)s:%(name)s:%(funcName)s:%(message)s")
    >>> from my_module import MyClass
    >>> MyClass.my_staticmethod()
    INFO:my_module.MyClass:my_staticmethod:my message
    >>> MyClass.my_classmethod()
    INFO:my_module.MyClass:my_classmethod:my message
    >>> my_obj = MyClass()
    >>> my_obj.my_method()
    INFO:my_module.MyClass:my_method:my message

## Add a user-named logger to a class

    # my_module.py

    import logging
    from autologging import logged

    @logged(logging.getLogger("my.app"))
    class MyClass:

        @staticmethod
        def my_staticmethod():
            MyClass.__log.info("my message")

        @classmethod
        def my_classmethod(cls):
            cls.__log.info("my message")

        def my_method(self):
            self.__log.info("my message")

    >>> import logging, sys
    >>> logging.basicConfig(
    ...     level=logging.INFO, stream=sys.stdout,
    ...     format="%(levelname)s:%(name)s:%(funcName)s:%(message)s")
    >>> from my_module import MyClass
    >>> MyClass.my_staticmethod()
    INFO:my.app.MyClass:my_staticmethod:my message
    >>> MyClass.my_classmethod()
    INFO:my.app.MyClass:my_classmethod:my message
    >>> my_obj = MyClass()
    >>> my_obj.my_method()
    INFO:my.app.MyClass:my_method:my message

## Add a logger to a nested class

    # my_module.py

    from autologging import logged

    @logged
    class MyClass:

       @logged
       class _Nested:

          def __init__(self):
             self.__log.info("my message")

       def my_method(self):
          self.__log.info("my message")
          nested = self._Nested()

    >>> import logging, sys
    >>> logging.basicConfig(
    ...     level=logging.INFO, stream=sys.stdout,
    ...     format="%(levelname)s:%(name)s:%(funcName)s:%(message)s")
    >>> from my_module import MyClass
    >>> my_obj = MyClass()
    >>> my_obj.my_method()
    INFO:my_module.MyClass:my_method:my message
    INFO:my_module.MyClass._Nested:__init__:my message

## Add a module-named logger to a function

    # my_module.py

    from autologging import logged

    @logged
    def my_function():
        my_function._log.info("my message")

    >>> import logging, sys
    >>> logging.basicConfig(
    ...     level=logging.INFO, stream=sys.stdout,
    ...     format="%(levelname)s:%(name)s:%(funcName)s:%(message)s")
    >>> from my_module import my_function
    >>> my_function()
    INFO:my_module:my_function:my message

## Add a user-named logger to a function

    # my_module.py

    import logging
    from autologging import logged

    @logged(logging.getLogger("my.app"))
    def my_function():
        my_function._log.info("my message")

    >>> import logging, sys
    >>> logging.basicConfig(
    ...     level=logging.INFO, stream=sys.stdout,
    ...     format="%(levelname)s:%(name)s:%(funcName)s:%(message)s")
    >>> from my_module import my_function
    >>> my_function()
    INFO:my.app:my_function:my message

## Add a logger to a nested function

    # my_module.py

    from autologging import logged

    @logged
    def my_function():
       @logged
       def nested_function():
          nested_function._log.info("my message")
       my_function._log.info("my message")
       nested_function()

    >>> import logging, sys
    >>> logging.basicConfig(
    ...     level=logging.INFO, stream=sys.stdout,
    ...     format="%(levelname)s:%(name)s:%(funcName)s:%(message)s")
    >>> from my_module import my_function
    >>> my_function()
    INFO:my_module:my_function:my message
    INFO:my_module:nested_function:my message