Tengo un proyecto donde las herramientas subyacentes están registrando, y también estoy registrando (con diferentes instancias de registrador).
Sin embargo, a veces el registrador al que no tengo acceso expone información que me gustaría eliminar del registro (o reemplazar con un marcador de posición).
¿Hay alguna manera de usar un filtro para hacer eso para todos registradores de Python en un proyecto?
Aquí está mi configuración de registro en Django:
LOGGING_CONFIG = None
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"my_formatter": {
"format": "[%(asctime)s] %(message)s",
"datefmt": "%d/%b/%Y %H:%M:%S",
},
},
"handlers": {
"console": {
"level": "DEBUG",
"class": "logging.StreamHandler",
"formatter": "my_formatter",
},
},
"loggers": {
"my_logger": {
"handlers": ["console"],
"level": "DEBUG"
},
},
}
logging.config.dictConfig(LOGGING)
Realmente, mi objetivo final es evitar que ciertas cosas aparezcan en los registros reemplazándolos; si hay alguna otra forma de hacerlo, siéntase libre de compartirlo.
¡Gracias!
Respuestas:
Si su objetivo principal es filtrar datos confidenciales, lea Ocultar datos confidenciales de registros con Python . Puede implementar una
logging.Filter
para evitar el registro de algunos registros o implementar unaloggingFormatter
para reducir solo las partes de registros específicos con una expresión regular.Para aplicar las clases de filtros y formateadores a todos los registradores, defínalos en la configuración dict y agréguelos a todos los controladores que tenga. Además, considere eliminar cualquier controlador no descrito mediante la configuración
disable_existing_loggers': True
. Vea ejemplos de formateadores y filtros personalizados en los documentos de registro de Django .fuente
Lo creas o no, ¡tienes acceso a los registradores de los proyectos subyacentes! Debido a que está en django, su configuración se puede cargar y el registro se puede inicializar, antes de que se instalen los registradores de los proyectos subyacentes.
Este es un proceso de dos pasos. El primer paso es identificar el registrador que es la fuente del mensaje que desea suprimir. Para hacer esto, agregue
name
amy_formatter
:Una vez que hayamos encontrado el nombre, podemos definir nuestro filtro.
Y ahora, ya que conoce el nombre del registrador que está produciendo el mensaje incorrecto, podemos adjuntar nuestro
AwesomeFilter
al registrador:Usamos el truco de encontrar el nombre del registrador para controlar la salida del registro para bibliotecas de terceros con bastante frecuencia. ¡Buena suerte!
fuente
Si desea propagar la misma configuración de registro a todos los trabajadores en su proyecto, sugiero hacer un archivo de registro en sus utilidades y luego importarlo a todas partes para usarlo en lugar de
import logging
Si desea asegurarse de que su configuración no está en conflicto con otros controladores , puede hacer lo siguiente
archivo utils / log.py
Luego, simplemente importe este registrador en todos sus trabajadores en lugar de la biblioteca de registro
fuente