Backend Developer en Mozio
settings.LOGGING
Trabajamos con Django
=
Tarea
Herramienta
Mostrar en consola detalles de pequeños scripts
print()
Mostrar información durante la ejecución normal de un programa
logging.debug() logging.info()
Lanzar avisos
warnings.warn()
logging.warning()
Informar de errores de ejecución
logging.error() logging.exception() logging.critical()
Incluído en la biblioteca estándar desde la versión 2.3
Mensajes con distintos niveles de importancia
Formatos de mensajes configurables
Configuración separada por grupos de mensajes
Distintos destinos para los mensajes
Niveles / Levels
Registradores / Loggers
Formateadores / Formatters
Manejadores / Handlers
Niveles / Levels
Registradores / Loggers
Formateadores / Formatters
Manejadores / Handlers
DEBUG, INFO, WARNING, ERROR, CRITICAL
Cajones/canales a los que enviar mensajes
Cada uno tiene un nombre (string)
Tienen jerarquía:
abuelo.padre.hijo
Definen el formato final del mensaje
Permiten incluir informacion extra útil: nombre del logger, nivel, marcas de tiempo, función, línea de código, etc.
Controlan el destino del mensaje: consola, fichero, fichero auto-rotable, socket de red, /dev/null
Registradores / Loggers
Formateadores / Formatters
Manejadores / Handlers
El módulo define automáticamente un registrador `root`
En la jerarquía, es siempre el padre del resto de registradores
Sin ningún Manejador asignado por defecto.
Pero lo hace automáticamente si se procesa un mensaje desde el módulo, pej. logging.debug()
Por defecto utilizan formateo de cadenas antiguo (%)
Pero no se usa el operador %, sino que se pasan como parámetros
StreamHandler, FileHandler y NullHandler se definen en logging, el resto en logging.handlers ¯\_(ツ)_/¯
Mensaje
Registrador
Nivel
Padre
No definido
Manejador
Mayor o igual
Nivel
Menor
Mayor o igual
Ignorar
Menor
Ignorar
Padre
No definido
Formateador
2017-09-19 16:57:55,840 | WARNING | Aviso
Control de niveles
Diferentes formatos
Varios destinos
A través de la API
FileConfig
DictConfig
En instancias, con logger.addHandler(), logger.setLevel(), etc.
A nivel de módulo logging.basicConfig()
El método recomendado: un diccionario "de toda la vida"
Basado en configparser
El más antiguo y sin soporte para algunas características
Se puede guardar en un fichero json/yaml y convertirlo a dict
A través de la API
DictConfig
logging.basicConfig() sólo sirve para el Registrador `root`
Y sólo si no tiene ya asignado algún Manejador
Llamar a logging.debug(), logging.info()... también llama a .basicConfig()
Llamar a instancia.debug() no configura nada, pero igual saca el mensaje por un manejador de ultimo recurso que escribe a STDERR
El único parametro requerido es `version` y el único valor admitido es 1.
`disable_existing_loggers`: True [por defecto] Deshabilita todos los loggers cuyo nombre o el de sus antecesores no hayan sido explicitamente configurados. Incluído el `root`
Ejemplos de configuración
Entendiendo el ajuste LOGGING de Django
@gooleres
flickr.com/photos/javi_romero/
bit.do/cutre-2
github.com/javiromero/pycones2017