Stavo cercando di creare un attributo personalizzato per la registrazione (nome della classe del chiamante, nome del modulo, ecc.) E mi sono bloccato con una strana eccezione che mi diceva che l'istanza LogRecord creata nel processo non aveva gli attributi necessari Dopo un po 'di test ho finito con questo:Modulo di registrazione Python: logger personalizzati
import logging
class MyLogger(logging.getLoggerClass()):
value = None
logging.setLoggerClass(MyLogger)
loggers = [
logging.getLogger(),
logging.getLogger(""),
logging.getLogger("Name")
]
for logger in loggers:
print(isinstance(logger, MyLogger), hasattr(logger, "value"))
questo apparentemente corretta pezzo di rendimenti codice:
False False
False False
True True
bug o funzionalità?
Grazie per il tuo commento, ho modificato la domanda. Ma penso che questo comportamento non sia quello che ci si aspetterebbe di accadere. – Pastafarianist
Perché non è quello che ti aspetteresti che accada? È * precisamente * ciò che la documentazione dice che accadrà quando non viene specificato alcun nome. –
Anche se questo è quello che dice la documentazione, è contro-intuitivo. Impostando una classe per i logger, mi aspetterei che _all_ logger abbiano quella classe, inclusa quella di root ed escludendo quelli già istanziati. – Pastafarianist