Tengo tres clases en python y se ejecutan en diferentes subprocesos. Me gustaría tener salida al mismo archivo de todas las clases. En este momento creé el método de salida en la clase principal y pasándolo a través de constructores a otras clases. ¿Hay forma de manejarlo mejor? ¿Cómo puedo pasar el registrador entre clases excepto usar contructors?Registro entre clases en python
Quizás python es compatible con algo así como el método estático en Java, por lo que puedo escribir como Logger.info (mensaje) en las tres clases?
Otra forma probablemente podría ser redirigiendo sys.stdout global para el archivo, es decir especificando
logger = open('debug.txt', 'w')
sys.stdout = logger
A continuación, utilizando las llamadas sys.stdout en todas las clases.
¿Qué opinas?
@lazyr. Gracias por la respuesta. ¿Cómo puedo pasar el objeto de registro entre clases para que los tres archivos escriban en el mismo archivo de registro? – yart
Tengo el código anterior en un archivo separado, digamos log.py, luego voy "desde el log log de importación" en cada uno de mis otros módulos. Python solo carga un módulo una vez, cualquier instrucción de importación después de la primera simplemente recupera lo que ya se ha cargado, por lo que será el mismo objeto de registro en todos sus hilos. –
@lazyr: en el caso del módulo 'logging', no necesita hacer eso - el módulo' logging' en sí mantiene los registradores que crea dentro de su propio módulo. Puede ejecutar 'logging.getLogger' nuevamente en otro módulo y obtendrá el mismo objeto. – nosklo