Pergunta

Eu quero unificar toda a facilidade de registro do meu aplicativo. Qualquer aviso é gerar uma exceção, ao lado eu pegá-lo e passá-lo para o logger. Mas a pergunta: Existe em registrar qualquer instalação mudo? Às vezes logger torna-se muito detalhado. Às vezes, a razão de avisos muito barulhento, é que há qualquer limite detalhado em advertências?

http://docs.python.org/library/logging.html

http://docs.python.org/library/warnings.html

Foi útil?

Solução

Não só existem , mas há uma href="http://docs.python.org/library/logging.html#configuring-logging" rel="nofollow noreferrer"> maneira muito flexível . Se você estiver usando objetos logger nomeados (por exemplo, logger = logging.getLogger(...)), então você pode configurá-los adequadamente. Isso vai deixar você configurar verbosidade em uma base subsistema-by-subsistema onde um subsistema é definido pela hierarquia de registro.

A outra opção é usar logging.Filter e Aviso filtros para limitar a saída. Eu não usei este método antes, mas parece que ele pode ser um melhor ajuste para suas necessidades.

PEP-282 uma leitura para uma descrição boa prosa de o pacote logging Python. Eu acho que ele descreve a funcionalidade muito melhor do que a documentação do módulo faz.

Editar depois de Esclarecimento

Você pode ser capaz de lidar com a parte de registro de isso usando uma classe personalizada com base em logging.Logger e registrado com logging.setLoggerClass(). Realmente parece que você quer algo semelhante ao do syslog "Última mensagem repetida 9 vezes" . Infelizmente eu não sei de uma implementação deste em qualquer lugar. Você pode querer ver se twisted.python.log suportes essa funcionalidade.

Outras dicas

da própria fonte que você mencionou. há os log-nível, usar a sabedoria; -)

LEVELS = {'debug': logging.DEBUG,
          'info': logging.INFO,
          'warning': logging.WARNING,
          'error': logging.ERROR,
          'critical': logging.CRITICAL}

Este será um problema se você pretende fazer todas as chamadas de registro de alguns manipulador de erro cego que não sabe nada sobre o código que levantou o erro, que é o que os seus sons pergunta como. Como é que vai decidir quais chamadas de registro são feitos e quais não?

A prática mais padrão é usar esses blocos para recuperar, se possível, e registrar um erro (na verdade, se é um erro que não foram especificamente preparados para, você quer saber sobre isso, use um nível alto) . Mas não contar com esses blocos para todas as informações de seu estado / debug. Melhor para polvilhar o seu código com o registo de chamadas antes que ele chegue ao erro-manipulador. Dessa forma, você pode observar informações de tempo de execução útil sobre um sistema quando não está a falhar e você pode fazer chamadas de registro de diferente gravidade. Por exemplo:

import logging
from traceback import format_exc
logger = logging.getLogger() # Gives the root logger.  Change this for better organization
# Add your appenders or what have you
def handle_error(e):
    logger.error("Unexpected error found")
    logger.warn(format_exc()) #put the traceback in the log at lower level
    ... #Your recovery code
def do_stuff():
    logger.info("Program started")
    ... #Your main code
    logger.info("Stuff done")
if __name__ == "__main__":
    try:
        do_stuff()
    except Exception,e:
        handle_error(e)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top