Pregunta

En Python 2.4 y posterior, configurar el módulo de registro para tener un formato más básico es fácil:

logging.basicConfig (level = opts.LOGLEVEL, format = "% (message) s ")

pero para las aplicaciones que necesitan soportar Python 2.3 parece más difícil, porque la API de registro fue revisada en Py2.4. En particular, basicConfig no toma ningún argumento. Al intentar una variación en el único ejemplo en la documentación de Py2.3, obtengo esto:

try:
    logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s")
except:
    logging.getLogger().setLevel(opts.LOGLEVEL)
    h = logging.StreamHandler()
    h.setFormatter(logging.Formatter("%(message)s"))
    logging.getLogger().addHandler(h)

pero llamando a este registrador raíz en Py2.3, por ejemplo

logging.info("Foo")

da salida duplicada:

Foo
INFO:root:Foo

No puedo encontrar una manera de modificar el formato del controlador existente en el registrador raíz en Py2.3 (el bloque '' excepto '' arriba), de ahí el '' addHandler '' llamada que produce la salida duplicada. ¿Hay alguna manera de establecer el formato del registrador raíz sin esta duplicación? Gracias!

¿Fue útil?

Solución

excepto: sin excepción clase [es] es una buena manera de meterse en problemas. Creo que el módulo logging en Python 2.3 tiene la función basicConfig () , pero con menos opciones. Como acepta ** kwargs , puede fallar en cualquier momento después de hacer algún trabajo. Creo que ya instaló un controlador con formato predeterminado y luego no pudo configurar algo. Después de detectar la excepción, ha instalado otro controlador. Al tener 2 controladores, obtienes 2 mensajes para cada evento. La forma más sencilla en su caso: evite usar basicConfig () y configure logging manualmente. Y nunca use excepto: si no vuelve a subir o no registra la excepción capturada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top