Tengo un simple script en Python que utiliza el incorporado logging
.Python: ¿evitar pasar la referencia del registrador entre funciones?
estoy configurar el registro dentro de una función. Estructura básica sería algo como esto:
#!/usr/bin/env python
import logging
import ...
def configure_logging():
logger = logging.getLogger("my logger")
logger.setLevel(logging.DEBUG)
# Format for our loglines
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
# Setup console logging
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
logger.addHandler(ch)
# Setup file logging as well
fh = logging.FileHandler(LOG_FILENAME)
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger
def count_parrots():
...
logger.debug??
if __name__ == '__main__':
logger = configure_logging()
logger.debug("I'm a log file")
parrots = count_parrots()
que pueda llamar desde el interior fina registrador __main__
. Sin embargo, ¿cómo puedo llamar al registrador desde dentro de la función count_parrots()? ¿Cuál es la forma más pitónica de manejar la configuración de un registrador como este?
Ok, entonces puedo simplemente llamar a logging.getLogger al comienzo de cada función que necesita iniciar sesión. Parece un poco derrochador y repetitivo seguramente? Lo suficientemente justo. ¿O sería mejor orientarme hacia los objetos y tratar de calzar todo en una clase? (Es una pregunta muy general que sé, solo estoy buscando qué es lo que se hace en el mundo de Python). – victorhooi
Puede poner su función en una clase con el registrador como variable de instancia, o (lo prefiero) crear un decorador para agregar la funcionalidad de registro a sus funciones individuales –
Esta respuesta muestra casi todo lo que está mal con el registro de Python. módulo ... – rkrzr