feat: added logging
This commit is contained in:
@@ -158,3 +158,70 @@ MEDIA_ROOT = BASE_DIR / 'media'
|
|||||||
|
|
||||||
EMAIL_USE_TLS = True
|
EMAIL_USE_TLS = True
|
||||||
EMAIL_USE_SSL = False
|
EMAIL_USE_SSL = False
|
||||||
|
|
||||||
|
|
||||||
|
# Logging
|
||||||
|
# https://docs.djangoproject.com/en/6.0/topics/logging/
|
||||||
|
|
||||||
|
# Se define entero (en vez de dejar el DEFAULT_LOGGING de Django) porque ese
|
||||||
|
# default, con DEBUG=False, solo engancha un handler de consola cuando
|
||||||
|
# DEBUG=True y manda los errores (django.request) por email a ADMINS cuando
|
||||||
|
# DEBUG=False; aquí ni ADMINS ni un EMAIL_HOST de verdad están configurados
|
||||||
|
# (ver env.py), así que en producción los 500 no se veían en ningún sitio.
|
||||||
|
# Con un handler de consola sin ese filtro, cualquier error queda en
|
||||||
|
# stdout/stderr, que es lo que recogen los logs del contenedor (`docker logs`,
|
||||||
|
# lo que agregue la plataforma de despliegue, etc.).
|
||||||
|
LOGGING = {
|
||||||
|
'version': 1,
|
||||||
|
'disable_existing_loggers': False,
|
||||||
|
'formatters': {
|
||||||
|
'verbose': {
|
||||||
|
'format': '{asctime} {levelname} {name} {message}',
|
||||||
|
'style': '{',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'handlers': {
|
||||||
|
'console': {
|
||||||
|
'class': 'logging.StreamHandler',
|
||||||
|
'formatter': 'verbose',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
# A WARNING fijo (no LOG_LEVEL): captura cualquier logger que no esté
|
||||||
|
# listado abajo (de terceros: weasyprint, whitenoise, PIL...) para que
|
||||||
|
# nada se pierda del todo, pero sin su parloteo en INFO/DEBUG -algunas
|
||||||
|
# librerías, como weasyprint, ya avisan cosas en INFO solo con
|
||||||
|
# importarlas-. 'django' y 'crochet' sí usan LOG_LEVEL, más abajo.
|
||||||
|
'root': {
|
||||||
|
'handlers': ['console'],
|
||||||
|
'level': 'WARNING',
|
||||||
|
},
|
||||||
|
'loggers': {
|
||||||
|
'django': {
|
||||||
|
'handlers': ['console'],
|
||||||
|
'level': LOG_LEVEL,
|
||||||
|
'propagate': False,
|
||||||
|
},
|
||||||
|
# Aquí es donde Django registra la traza completa de cualquier
|
||||||
|
# excepción no controlada en una vista (un 500): sin esto configurado
|
||||||
|
# explícitamente, en producción (DEBUG=False) solo se intentaba
|
||||||
|
# mandar por email a ADMINS, no configurado.
|
||||||
|
'django.request': {
|
||||||
|
'handlers': ['console'],
|
||||||
|
'level': 'ERROR',
|
||||||
|
'propagate': False,
|
||||||
|
},
|
||||||
|
'django.security': {
|
||||||
|
'handlers': ['console'],
|
||||||
|
'level': 'WARNING',
|
||||||
|
'propagate': False,
|
||||||
|
},
|
||||||
|
# Logger propio de la app, para poder hacer
|
||||||
|
# logging.getLogger(__name__) desde cualquier módulo de crochet/ sin
|
||||||
|
# tener que tocar esta configuración cada vez.
|
||||||
|
'crochet': {
|
||||||
|
'handlers': ['console'],
|
||||||
|
'level': LOG_LEVEL,
|
||||||
|
'propagate': False,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|||||||
@@ -43,3 +43,10 @@ EMAIL_HOST = env.str('EMAIL_HOST', '')
|
|||||||
EMAIL_HOST_USER = env.str('EMAIL_HOST_USER', '')
|
EMAIL_HOST_USER = env.str('EMAIL_HOST_USER', '')
|
||||||
EMAIL_HOST_PASSWORD = env.str('EMAIL_HOST_PASSWORD', '')
|
EMAIL_HOST_PASSWORD = env.str('EMAIL_HOST_PASSWORD', '')
|
||||||
EMAIL_PORT = env.int('EMAIL_PORT', 587)
|
EMAIL_PORT = env.int('EMAIL_PORT', 587)
|
||||||
|
|
||||||
|
# Nivel de log de la app y de Django (ver LOGGING en base.py). En producción
|
||||||
|
# (DEBUG=False) Django, por defecto, solo manda los errores por email a
|
||||||
|
# ADMINS (que aquí no está configurado), así que sin un LOGGING propio no se
|
||||||
|
# ve ni un rastro de un 500 en ningún sitio; con esto van a stdout/stderr,
|
||||||
|
# que es lo que recogen los logs del contenedor.
|
||||||
|
LOG_LEVEL = env.str('LOG_LEVEL', 'INFO')
|
||||||
|
|||||||
Reference in New Issue
Block a user