== Logging

Si on veut propager les logs entre applications, il faut bien spécifier l'attribut `propagate`, sans quoi on s'arrêtera au module sans prendre en considération les sous-modules.

[source,python]
----
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': os.path.join(SRC_DIR, 'log', 'log.txt'),
        },
    },
    'loggers': {
        'mv': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}
----

Par exemple:

[source,python]
----
'loggers': {
    'mv': {  # Parent
        'handlers': ['file'],
        'level': 'DEBUG',
    },
    'mv.models': { # Enfant
        'handlers': ['console'],
        'level': 'DEBUG',
        'propagate': True,
    }
},
----

Et dans le fichier `mv/models.py`, on a ceci: 

[source,python]
----
logger = logging.getLogger(__name__)
logger.debug('helloworld');
----

Le log sera écrit dans la console **ET** dans le fichier.

Par contre, si on retire l'attribut `propagate: True` (ou qu'on le change en `propagate: False`), le même code ci-dessus n'écrit que dans la console. Simplement parce que le log associé à un package considère par défaut ses enfants, alors que le log associé à un module pas. [Par exemple](https://docs.djangoproject.com/en/2.1/topics/logging/#examples).
