Pergunta

Em Python 2.4 e mais tarde, a configuração do módulo de registro para ter uma formatação mais básico é fácil:

logging.basicConfig (nível = opts.LOGLEVEL, format = "% (message) s")

mas para aplicações que necessitam para apoiar Python 2.3 parece mais difícil, porque a API de registro foi revisado em Py2.4. Em particular, basicConfig não leva quaisquer argumentos. Tentando uma variação sobre o único exemplo na documentação Py2.3, fico com esta:

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)

mas chamar este logger raiz em Py2.3, por exemplo.

logging.info("Foo")

dá saída duplicado:

Foo
INFO:root:Foo

Não consigo encontrar uma maneira de modificar o formato do manipulador existente no logger raiz em Py2.3 (o "exceto" bloco acima), daí a chamada "addHandler" que está produzindo a saída duplicada. Existe uma maneira para definir o formato do registrador de raiz, sem essa duplicação? Obrigado!

Foi útil?

Solução

except: sem classe de exceção [es] é uma boa maneira de ficar em apuros. Acredito módulo logging em Python 2.3 tem a função basicConfig(), mas com menos opções. Desde que aceita **kwargs ele pode falhar a qualquer momento depois de fazer algum trabalho. Eu acho que já instalou um manipulador com formato padrão, em seguida, não conseguiu configurar alguma coisa. Depois de pegar exceção de ter instalado outro manipulador. Tendo 2 manipuladores chegar 2 mensagens para cada evento. A maneira mais simples no seu caso: evitar o uso basicConfig() em tudo e logging configure manualmente. E nunca use except: se você não reraise ou log exceção capturada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top