¿Es posible decorar / extender el sistema de registro estándar de Python, de modo que cuando se invoque un método de registro, también registre el archivo y el número de línea donde se invocó o tal vez el método que lo invocó?
123
Seguro, verifique los formateadores en los documentos de registro. Específicamente las variables lineno y pathname.
% (nombre de ruta) s Nombre de ruta completo del archivo de origen donde se emitió la llamada de registro (si está disponible).
% (nombre de archivo) s Parte del nombre de archivo de la ruta.
% (módulo) s Módulo (parte del nombre del nombre del archivo).
% (funcName) s Nombre de la función que contiene la llamada de registro.
% (lineno) d Número de línea de origen donde se emitió la llamada de registro (si está disponible).
Se parece a esto:
formatter = logging.Formatter('[%(asctime)s] p%(process)s {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s','%m-%d %H:%M:%S')
Además de la respuesta muy útil de Seb , aquí hay un fragmento de código útil que demuestra el uso del registrador con un formato razonable:
Genera esta salida:
fuente
Para construir sobre lo anterior de una manera que envíe el registro de depuración a la salida estándar:
Poner lo anterior en un archivo llamado
debug_logging_example.py
produce la salida:Entonces, si desea desactivar el cierre de sesión, comentar
root.setLevel(logging.DEBUG)
.Para archivos individuales (por ejemplo, asignaciones de clases), he encontrado que esta es una forma mucho mejor de hacer esto en lugar de usar
print()
declaraciones. Donde le permite desactivar la salida de depuración en un solo lugar antes de enviarla.fuente
Para los desarrolladores que usan PyCharm o Eclipse pydev, lo siguiente producirá un enlace al origen de la declaración de registro en la salida del registro de la consola:
Consulte los hipervínculos del archivo de origen de Pydev en la consola de Eclipse para una discusión e historia más largas.
fuente
A diferencia de las otras respuestas, esto registrará la ruta completa del archivo y el nombre de la función que pudo haber ocurrido un error. Esto es útil si tiene un proyecto con más de un módulo y varios archivos con el mismo nombre distribuidos en estos módulos.
fuente