Ho tre classi in python e vengono eseguite in thread diversi. Mi piacerebbe avere l'output per lo stesso file da tutte le classi. In questo momento ho creato il metodo di output nella classe principale e lo ho passato attraverso i costruttori ad altre classi. C'è modo di gestirlo meglio? Come posso passare il logger tra le classi ad eccezione dell'utilizzo di contromisure?Registrazione tra le classi in python
Forse python supporta qualcosa come il metodo statico in Java, quindi posso scrivere come Logger.info (messaggio) in tutte e tre le classi?
Un altro modo probabilmente potrebbe essere il reindirizzamento sys.stdout globale per il file, cioè specificando
logger = open('debug.txt', 'w')
sys.stdout = logger
quindi utilizzando chiamate sys.stdout in tutte le classi.
Cosa ne pensi?
@lazyr. Grazie per la risposta. Come posso passare l'oggetto log tra classi così tutti e tre i file e scriverà nello stesso file di log? – yart
Ho il codice di cui sopra in un file separato, ad esempio log.py, quindi vado "da log import log" in ciascuno dei miei altri moduli. Python carica solo un modulo una volta - qualsiasi istruzione import dopo il primo si limita a recuperare ciò che è già stato caricato - quindi sarà lo stesso oggetto log in tutti i thread. –
@lazyr: Nel caso del modulo 'logging', non è necessario farlo - il modulo' logging' mantiene i logger che crea all'interno del proprio modulo. Puoi semplicemente eseguire 'logging.getLogger' di nuovo in un altro modulo e otterrai lo stesso oggetto. – nosklo