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

70 lines
1.8 KiB
Plaintext
Raw Normal View History

2020-02-16 21:11:51 +01:00
== Logging
2018-11-14 11:46:34 +01:00
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.
2020-02-16 21:11:51 +01:00
[source,python]
----
2018-11-14 11:46:34 +01:00
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': '{',
},
},
2018-11-14 11:46:34 +01:00
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': "simple"
}
2018-11-14 11:46:34 +01:00
},
'loggers': {
'connexys': {
'handlers': ['console'],
2018-11-14 11:46:34 +01:00
'level': 'DEBUG',
'propagate': True,
},
'stp': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True,
},
}
2018-11-14 11:46:34 +01:00
}
2020-02-16 21:11:51 +01:00
----
Par exemple:
2020-02-16 21:11:51 +01:00
[source,python]
----
'loggers': {
'mv': { # Parent
'handlers': ['file'],
'level': 'DEBUG',
},
'mv.models': { # Enfant
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True,
}
},
2020-02-16 21:11:51 +01:00
----
Et dans le fichier `mv/models.py`, on a ceci:
2020-02-16 21:11:51 +01:00
[source,python]
----
logger = logging.getLogger(__name__)
logger.debug('helloworld');
2020-02-16 21:11:51 +01:00
----
Le log sera écrit dans la console **ET** dans le fichier.
2020-02-16 21:11:51 +01:00
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).