Existe uma maneira de fazer o log do Python usando o logging
módulo gerar automaticamente coisas para o stdout , além do arquivo de log para onde elas devem ir? Por exemplo, eu gostaria de todas as chamadas para logger.warning
, logger.critical
, logger.error
para ir para seus lugares destinados mas, além disso sempre ser copiado para stdout
. Isso evita a duplicação de mensagens como:
mylogger.critical("something failed")
print "something failed"
Respostas:
Toda saída de log é manipulada pelos manipuladores; basta adicionar um
logging.StreamHandler()
ao registrador raiz.Aqui está um exemplo de configuração de um manipulador de fluxo (usando em
stdout
vez do padrãostderr
) e adicionando-o ao criador de logs raiz:fonte
stdout
?logging.Formatter
.A maneira mais simples de fazer logon no stdout:
fonte
stream=sys.stdout
ainda funciona para o logon no console para mim.É possível usando vários manipuladores.
Consulte: https://docs.python.org/2/howto/logging-cookbook.html
fonte
sys.stdout
parâmetroch = logging.StreamHandler()
Você pode criar dois manipuladores para file e stdout e, em seguida, criar um logger com
handlers
argumento parabasicConfig
. Pode ser útil se você tiver o mesmo log_level e formato de saída para os dois manipuladores:fonte
A maneira mais simples de registrar em arquivo e em stderr:
fonte
Aqui está uma solução baseada no
logging.config.dictConfig
método poderoso, mas mal documentado . Em vez de enviar todas as mensagens de log parastdout
, ele envia mensagens com nível de logERROR
e superior astderr
e tudo o mais parastdout
. Isso pode ser útil se outras partes do sistema estiverem ouvindostderr
oustdout
.fonte
Como ninguém compartilhou uma linha dupla elegante, compartilharei a minha:
fonte
Aqui está um exemplo extremamente simples:
A saída mostrará "test msg" no stdout e também no arquivo.
fonte