É possível decorar / estender o sistema de log padrão do python, para que, quando um método de log for chamado, ele também registre o arquivo e o número da linha em que foi chamado ou talvez o método que o chamou?
123
Claro, verifique os formatadores nos documentos de log. Especificamente, as variáveis lineno e nome do caminho.
% (nome do caminho) s Nome completo do arquivo de origem em que a chamada de log foi emitida (se disponível).
% (filename) s Parte do nome do arquivo do nome do caminho.
% (module) s Module (parte do nome do nome do arquivo).
% (funcName) s Nome da função que contém a chamada de log.
% (lineno) d Número da linha de origem em que a chamada de log foi emitida (se disponível).
Parece algo como isto:
formatter = logging.Formatter('[%(asctime)s] p%(process)s {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s','%m-%d %H:%M:%S')
Além da resposta muito útil de Seb , aqui está um trecho de código útil que demonstra o uso do criador de logs com um formato razoável:
Gera esta saída:
fonte
Para desenvolver o exposto de uma maneira que envia o log de depuração para o padrão:
Colocar o acima em um arquivo chamado
debug_logging_example.py
produz a saída:Então, se você deseja desativar o logoff, comentar
root.setLevel(logging.DEBUG)
.Para arquivos únicos (por exemplo, tarefas de classe), achei essa uma maneira muito melhor de fazer isso, em vez de usar
print()
instruções. Onde ele permite desativar a saída de depuração em um único local antes de enviá-la.fonte
Para desenvolvedores que usam PyCharm ou Eclipse pydev, o seguinte produzirá um link para a fonte da instrução de log na saída do log do console:
Consulte Hiperlinks do arquivo de origem Pydev no console do Eclipse para discussão e histórico mais longos.
fonte
Diferente das outras respostas, isso registrará o caminho completo do arquivo e o nome da função que pode ter ocorrido um erro. Isso é útil se você tiver um projeto com mais de um módulo e vários arquivos com o mesmo nome distribuídos nesses módulos.
fonte