¿Se puede realizar un registro estructurado con la biblioteca estándar de Pythons?

Recientemente leí sobre el registro estructurado ( aquí ). La idea parece ser registrar, no agregando cadenas simples como una línea a un archivo de registro, sino objetos JSON. Esto permite analizar el archivo de registro mediante herramientas automáticas.

¿Puede Pythons logging library hacer logging estructurado? Si no es así, ¿existe una solución “convencional” (p. Ej., Como numpy / scipy es la solución principal para los cálculos científicos)? Encontré structlog , pero no estoy seguro de cuán extendido está.

¿Ha visto la sección del sitio de documentos de Python que describe la implementación del registro estructurado que explica cómo se puede utilizar el registrador incorporado de python para el registro estructurado?

A continuación se muestra un ejemplo simple como se indica en el sitio anterior.

 import json import logging class StructuredMessage(object): def __init__(self, message, **kwargs): self.message = message self.kwargs = kwargs def __str__(self): return '%s >>> %s' % (self.message, json.dumps(self.kwargs)) m = StructuredMessage # optional, to improve readability logging.basicConfig(level=logging.INFO, format='%(message)s') logging.info(m('message 1', foo='bar', bar='baz', num=123, fnum=123.456)) 

Lo que resulta en el siguiente registro.

 message 1 >>> {"fnum": 123.456, "num": 123, "bar": "baz", "foo": "bar"} 

Espero que esto ayude.

Si instala python-json-logger (288 estrellas, 70 forks) y tiene una configuración de registro (YAML) como la siguiente, obtendrá un archivo de registro estructurado.

 version: 1 formatters: detailed: class: logging.Formatter format: '[%(asctime)s]:[%(levelname)s]: %(message)s' json: class: pythonjsonlogger.jsonlogger.JsonFormatter format: '%(asctime)s %(levelname)s %(message)s' handlers: console: class: logging.StreamHandler level: INFO formatter: detailed file: class: logging.FileHandler filename: logfile.log level: DEBUG formatter: json root: level: DEBUG handlers: - console - file