gwift-book/source/part-3-django-concepts/logging.adoc

1.8 KiB
Raw Blame History

Logging

Si on veut propager les logs entre applications, il faut bien spécifier lattribut propagate, sans quoi on sarrêtera au module sans prendre en considération les sous-modules.

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
            'style': '{',
        },
        'simple': {
            'format': '{levelname} {asctime} {module} {message}',
            'style': '{',
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': "simple"
        }
    },
    'loggers': {
        'connexys': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'stp': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': True,
        },
    }
}

Par exemple:

'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:

logger = logging.getLogger(__name__)
logger.debug('helloworld');

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

Par contre, si on retire lattribut propagate: True (ou quon 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).