Tengo un paquete que tiene varios componentes que se beneficiarían enormemente del uso del registro y la salida de información útil.Manera eficiente de configurar el registro en un módulo de paquete
Lo que no quiero hacer es 'setup' registrador apropiado para cada archivo individual con alguna parte a lo largo de estas líneas:
import logging
logging.basicConfig(level=DEBUG)
my_function = logging.getLogger("my_function")
my_class = logging.getLogger("my_class")
He probado un par de enfoques, uno de ellos es la adición de la plancha de caldera código en una clase dentro de un módulo de servicios públicos y tratar de hacer algo como esto:
from util import setlogging
set_logging()
Pero incluso la solución anterior no se ve limpio para mí y que podría causar problemas debido a setLogger no tiene un método __call__
. Lo que sí me gustó fue que mi clase "set_logging" leería un archivo de configuración y tendría algunos valores predeterminados para que no importara qué nivel o qué tipo de formato de registro quería que lo configurara correctamente.
¿Hay alguna forma de inicializar el registro adecuado en mi paquete? ¿Tal vez en el archivo __init__.py
?
Y sólo para ser lo más detallado posible, esto es lo que setlogging (ahora una función, no una clase) que parece:
def setlogging(config=None):
if config == None:
config = config_options() # sets default values
levels = {
'debug': DEBUG,
'info': INFO
}
level = levels.get(config['log_level'])
log_format = config['log_format']
datefmt = config['log_datefmt']
basicConfig(
level = level,
format = log_format,
datefmt = datefmt)
¿No tendría que llamar a setlogging() para poder acceder a 'mylogger'? Aunque intento eso, todavía obtengo un AttributeError esperado ya que el objeto 'function' no tiene el atributo 'mylogger'. Tal vez no entiendo por completo ... – alfredodeza
@alfredo, necesita ser llamado solo una vez (del '' __init__. Py' del paquete sería el lugar más simple de usar para este propósito, ya que usted sabe que siempre se ejecuta antes que cualquier código en cualquier módulo del paquete) y por supuesto puede agregar a ese registrador un manejador, con su formateador configurado como lo desee, como en el código de ejemplo dado en http://docs.python.org/library/logging.html?highlight=logging#configuring-logging. –
Gracias Alex, ¡eso realmente ayudó! Te compraré una cerveza el próximo año en PyCon :) – alfredodeza