Programação

Logging in Python - Your One Stop Guide

Logging in Python - Your One Stop Guide

O registro é uma etapa crucial a ser realizada por um programador durante o desenvolvimento de software. Ajuda os desenvolvedores a rastrear eventos que acontecem durante a execução de um programa, o que pode ser útil para o futuro processo de depuração. Se você é um novo aluno ou está trabalhando em um novo projeto, é uma boa prática usar o registro para rastrear o fluxo do código e para resolver erros.

Ao escrever programas curtos, a maioria de nós geralmente ignora o registro, mas quando o programa se torna complexo, é uma etapa essencial e útil de usar o registro para corrigir os erros que impedem o software de funcionar sem problemas. O registro nada mais é do que escrever os eventos do software em um arquivo de registro ou enviá-los ao terminal.

O registro não é usado apenas para depuração. É também um processo útil para a coleta de informações, coleta de dados de uso e muitas outras tarefas úteis. É também uma das funções mais usuais para desenvolvedores da web não apenas detectar erros, mas também coletar dados do usuário, como endereços IP, que podem ser usados ​​para análises de negócios adicionais.

Em Python, a maioria dos recursos de registro são fornecidos pelo exploração madeireira módulo apresentado na biblioteca padrão do python, então não temos que fazer nenhuma configuração extra. Vamos ver como usá-lo para fazer login em python. Antes de seguir este tutorial, é necessário ter a versão mais recente do python instalada em seu sistema. Se você não tiver o python mais recente instalado em seu sistema, pode seguir nosso guia passo a passo sobre como instalar e atualizar o python no Linux.

O módulo de registro Python

O módulo de registro do python é uma das bibliotecas de registro mais usadas em python. A melhor parte é que ele vem pré-instalado com a biblioteca padrão do python, então não precisamos fazer nenhuma configuração ou instalação. O módulo de registro é robusto e direto, o que significa que é útil para iniciantes e empresas. Para usar o módulo de registro em python, precisamos importá-lo para nosso programa como faço na seguinte linha de código.

registro de importação

Agora vamos ver uma demonstração de como podemos registrar algumas mensagens no terminal. Basta copiar o código a seguir em seu IDE python favorito e executar.

importar registro de log.aviso ("Este é um aviso")

Ao executar o código acima, obteremos a saída conforme mostrado na imagem abaixo.

Como visto na saída, o programa imprime uma mensagem de aviso. O módulo de registro também tem alguns outros níveis de registro, como informação, erro, etc., o que torna nossa tarefa fácil. Vamos discuti-los brevemente com exemplos.

Níveis de registro Python

Muitos níveis de registro podem ser usados ​​para registrar mensagens diferentes no nível de gravidade. Os níveis fornecidos pelo python exploração madeireira módulo são

Esses níveis são mostrados em ordem decrescente de sua gravidade. Vamos ver como usar esses níveis em nosso programa. Basta copiar o código a seguir e executar no IDE do Python.

importar registro de log.registro crítico ("Esta é uma mensagem crítica").registro de erros ("Esta é uma mensagem de erro").registro de aviso ("Esta é uma mensagem de aviso").registro de informações ("Esta é uma mensagem de informações").debug ("Esta é uma mensagem de depuração")

Ao executar o código acima no IDE, a saída que o terminal mostra é mostrada na imagem abaixo.

Como você pode ver na saída, as mensagens DEBUG e INFO não são impressas no terminal porque o módulo de log, por padrão, loga apenas as mensagens de nível de segurança maior ou igual ao aviso. Para exibir INFO e DEBUG no terminal, precisamos alterar a configuração básica do logger manualmente. Para fazer isso, podemos usar o basicConfig (**kwargs) método fornecido pelo módulo de registro. Para ver uma demonstração simples de configuração, basta executar o seguinte código em seu IDE Python.

importar registro de log.basicConfig (nível = registro.Registro de depuração.registro crítico ("Esta é uma mensagem crítica").registro de erro ("Esta é uma mensagem de erro").registro de aviso ("Esta é uma mensagem de aviso").registro de informações ("Esta é uma mensagem de informações").debug ("Esta é uma mensagem de depuração")

No código acima, definimos o nível de exploração madeireira.DEPURAR, o que significa que todos os níveis que estão acima do nível de depuração serão registrados. Assim, no código acima, todas as mensagens serão registradas conforme mostrado na imagem abaixo.

Vamos discutir mais o método basicConfig () do módulo de registro.

Configurações Básicas

O módulo de registro fornece um método basicConfig (** Kwargs) muito útil, que é usado para definir as configurações de registro de dados. Alguns dos parâmetros comumente usados ​​da função basicConfig () são:

Vamos ver como podemos usar essas configurações no módulo de registro do python, explorando o exemplo de um após um.

O parâmetro level é usado para definir o nível de gravidade, para ver uma demonstração prática de como usá-lo, copie o código abaixo no IDE do python e execute.

importar registro de log.basicConfig (nível = registro.INFO) registro.registro crítico ("Esta é uma mensagem crítica").registro de erro ("Esta é uma mensagem de erro").registro de aviso ("Esta é uma mensagem de aviso").registro de informações ("Esta é uma mensagem de informações").debug ("Esta é uma mensagem de depuração")

Ao executar o código, você pode ver a saída, conforme mostrado na imagem abaixo. Como você pode ver que as mensagens que estão acima dos níveis de informação são impressas, mas a mensagem no nível de depuração não é impressa.

O parâmetro de nível é uma configuração útil que deve ser feita para que os arquivos de log não sejam muito grandes, contendo dados desnecessários e tenham apenas as informações necessárias.

Login em um arquivo

Vimos apenas como fazer logon no terminal, mas o logon no terminal nem sempre é útil, pois não podemos salvá-lo para uso posterior. Para uma solução melhor, podemos imprimir os logs em um arquivo de texto que salvamos e analisamos posteriormente. Os logs são texto e podem ser mantidos em um arquivo de texto de qualquer formato, mas universalmente é adotado salvar os logs em um arquivo com o .extensão de log. Esses arquivos são conhecidos como arquivos de log e são usados ​​universalmente para armazenar logs de programas, aplicativos da web e outros softwares.

Podemos salvar os registros em um arquivo definindo a configuração do módulo de registro com a ajuda da função basicConfig (). Precisamos dar o nome do arquivo onde queremos salvar os logs no parâmetro filename da função basicConfig (), após o qual os registros serão automaticamente impressos no arquivo de log que especificarmos. Vamos ver um exemplo prático para saber como funciona.

importar registro de log.basicConfig (nível = registro.INFO, nome do arquivo = "meulog.log ") registro.registro crítico ("Esta é uma mensagem crítica").registro de erro ("Esta é uma mensagem de erro").registro de aviso ("Esta é uma mensagem de aviso").registro de informações ("Esta é uma mensagem de informações").debug ("Esta é uma mensagem de depuração")

Ao executar o código, você pode ver que um novo arquivo foi criado no nome do diretório de trabalho atual mylog.registro. Ao abrir o arquivo com um editor de texto, você pode notar que os logs foram salvos no arquivo.

Se executarmos novamente o código, veremos que o log será anexado ao arquivo. Podemos mudar isso especificando o parâmetro filemode na função basiconfig (). Por padrão, o parâmetro filemode tem o valor "a", que significa append. Mas às vezes também queremos excluir os dados registrados anteriormente e gravar os novos registros apenas no arquivo. Para fazer isso, podemos dar ao parâmetro filemode o valor "w", que significa escrever, e ele exclui todos os dados anteriores do arquivo e grava os novos. Para uma demonstração, veja o seguinte exemplo.

importar registro de log.basicConfig (nível = registro.INFO, nome do arquivo = "meulog.log ", filemode =" w ") registro.registro crítico ("Esta é uma mensagem crítica").registro de erro ("Esta é uma mensagem de erro").registro de aviso ("Esta é uma mensagem de aviso").registro de informações ("Esta é uma mensagem de informações").debug ("Esta é uma mensagem de depuração")

Ao executar o código acima, você pode notar que os logs anteriores presentes no arquivo foram removidos do arquivo e os novos logs foram adicionados. Cada vez que executamos o código, os novos logs serão adicionados e os anteriores serão excluídos, o que é útil quando não precisamos dos registros para uso posterior.

Formatando os Logs

Vimos que os logs de saída têm o layout padrão, mas podemos alterar o formato definindo o parâmetro de formato da função basicConfig (). Vamos ver uma demonstração prática para saber como podemos usar o parâmetro de formato na função basicConfig () para alterar o formato do log.

importar registro de log.basicConfig (nível = registro.INFO, formato = "% (nome do arquivo) s:% (nome do nível) s:% (mensagem) s") registro.registro crítico ("Esta é uma mensagem crítica").registro de erro ("Esta é uma mensagem de erro").registro de aviso ("Esta é uma mensagem de aviso").registro de informações ("Esta é uma mensagem de informações").debug ("Esta é uma mensagem de depuração")

A saída do código acima é mostrada na imagem abaixo.

Como você pode ver na saída, o nome do arquivo também foi exibido. Podemos usar o parâmetro de formato para indicar muitos outros formatos, vamos discutir alguns deles.

% (asctime) s: Isso é usado para exibir o tempo legível por humanos nos registros. Para ver como ele mostra o tempo, execute o seguinte código no IDE do Python.

importar registro de log.basicConfig (nível = registro.INFO, format = "% (asctime) s:% (message) s") registro.aviso ("Esta é uma mensagem de aviso")

Ao executar o código, você pode ver a saída, conforme mostrado na imagem abaixo.

% (criado) f: Isso irá mostrar a hora em que o log é criado.

% (nome do arquivo) s: Isso é usado para exibir o nome do arquivo na mensagem de log. Para ver como funciona, basta executar o seguinte código de exemplo em seu IDE Python.

importar registro de log.basicConfig (nível = registro.INFO, formato = "% (asctime) s:% (nome do arquivo) s:% (mensagem) s") registro.aviso ("Esta é uma mensagem de aviso")

A saída que o código fornece é mostrada na imagem a seguir. Na saída, o nome do arquivo foi exibido. Isso é útil ao trabalhar em um projeto que envolve vários arquivos para que possamos obter o arquivo que contém o erro rapidamente.

% (levelname) s: Isso é usado para exibir o nome do nível usado como WARNING, DEBUG, etc.

% (levelno) s: Isso é usado para imprimir o valor numérico do nível do qual a mensagem faz parte.

% (lineno) d: Isso é usado para imprimir o número da linha da linha atual, que exibe a mensagem. Isso é muito útil, pois nos dá o número da linha onde devemos ver se há um erro, então ajuda no processo de depuração. Vamos ver um código de exemplo para ver como usá-lo para formar a saída de logs.

import logging Format = '% (asctime) s:% (filename) s:% (lineno) d:% (message) s' logging.basicConfig (nível = registro.INFO, formato = formato) registro.aviso ("Esta é uma mensagem de aviso")

Este código também imprimirá a linha não, conforme mostrado na imagem abaixo.

% (mensagem) s: É usado para exibir a mensagem que registramos.

% (nome do caminho) s: Isso é usado para mostrar o caminho completo do arquivo de código-fonte.

% (processo) d: Isso exibirá o id do processo, se disponível.

% (processname) s: Isso exibirá o nome do processo, se disponível.

% (discussão) d: Isto irá mostrar o ID do Tópico se disponível.

% (threadName) s: Isso exibirá o nome do segmento, se disponível.

Registro de dados variáveis

Fornecemos as mensagens nos logs por nós mesmos, que são dados estáticos. Ainda assim, em aplicativos do mundo real, os dados que registramos serão principalmente informações dinâmicas de nosso aplicativo. Para fazer isso, precisamos gerar as variáveis ​​com o log de mensagens. Podemos fazer isso de várias maneiras. Por exemplo, podemos incluir as variáveis ​​e formatar a string com marcadores e, em seguida, passá-los para o log de mensagens para que os valores das variáveis ​​sejam emitidos nos registros.

Por exemplo, veja o código abaixo; você pode copiar o código e executar em seu IDE python.

log de importação var_message = log de "erro interno".aviso ("O servidor foi parado devido a% s", var_message)

Ao executar o código, você verá a saída, conforme mostrado na imagem abaixo. Como você pode ver na imagem que o valor armazenado na variável também é impresso na tela.

Também podemos exibir variáveis ​​em logs usando as strings f, que são introduzidas em python 3.6. Mas para usar as strings f, você precisará do python 3.6 ou superior instalado em seu sistema. Você pode verificar qual versão do Python está instalada em seu sistema executando o seguinte comando no terminal.

python --version # para python 2 no Linux python3 --version # para python 3 no Linux

Isto irá imprimir a versão do python que você está usando no seu sistema. É uma boa prática usar a versão mais recente do python para obter melhor desempenho; você pode ver nosso guia para atualizar sua versão python no Linux.

Para formatar strings usando f-strings em python, precisamos usar a seguinte sintaxe de código. Você pode copiar e executar o código em seu IDE python favorito.

log de importação var_message = log de "erro interno".aviso (f "O servidor foi parado devido a var_message")

Ao executar o código, você obterá uma saída semelhante à que obtemos ao executar o código acima. Mas quando vemos o código, podemos notar f no início da string, o que representa que é uma string f, e podemos usar variáveis ​​diretamente em strings f colocando-as entre chaves.

Logging Stack Traces

O módulo de registro também pode ser usado para capturar rastreamentos de pilha. Os rastreamentos de pilha são as mensagens de exceção que são lançadas quando ocorre um erro no programa. Podemos capturar a exceção configurando o parâmetro exc_info como True ao chamar a função de registro. Este parâmetro é útil porque podemos registrar a mensagem de exceção completa com nossa mensagem de erro em um arquivo ou tela de terminal.

Para obter uma demonstração prática de como podemos remover os rastreamentos de pilha, copie o código a seguir em seu IDE python e execute.

import logging try: a = 1/0 exceto Exceção como e: logging.erro ("Ocorreu um erro", exc_info = True)

Ao executar o código, a exceção será registrada no terminal. Você verá a saída do código, conforme mostrado na imagem abaixo. Você também pode registrar a exceção em um arquivo usando o parâmetro de nome de arquivo no método basicConfig (), como discutimos acima.

Este método também é crítico na construção de um aplicativo extenso, pois podemos ter tratamento de exceção com registro, o que é excelente para o processo de depuração.

Objetos Logger

O módulo de registro também fornece algumas classes úteis que podem ser usadas para um melhor registro, principalmente para uma aplicação mais ampla. Vamos ver algumas das classes mais usadas do módulo de registro e o que e como elas funcionam.

Se você quiser detalhes completos sobre como usar essas classes, pode consultar a documentação oficial do módulo de registro em python.

Conclusão

Neste artigo, aprendemos o básico para fazer log em python. O módulo de registro é uma maneira simples e poderosa de fazer registro em python. Suponha que você não esteja fazendo o registro até agora, hoje é o dia para começar a fazer o registro ao ler o artigo e aprender como é fácil usar o registro em python. Agora você pode usar o registro em aplicativos pequenos e significativos.

Se você fizer o registro corretamente, será realmente útil de uma forma ou de outra. Aconselho-o a começar a utilizá-lo a partir de pequenos programas, pois irá ajudá-lo a obter um bom conhecimento de uma ou duas coisas e não terá preço para grandes projetos. Você também pode querer ver como trabalhar com bancos de dados SQLite em python. 

Remapeie os botões do mouse de maneira diferente para software diferente com o controle de botão do mouse X
Talvez você precise de uma ferramenta que possa fazer o controle do seu mouse mudar com cada aplicativo que você usa. Se for esse o caso, você pode ex...
Análise do mouse sem fio Microsoft Sculpt Touch
Recentemente li sobre o Microsoft Sculpt Touch mouse sem fio e decidi comprá-lo. Depois de usá-lo por um tempo, decidi compartilhar minha experiência ...
AppyMouse na tela Trackpad e ponteiro do mouse para tablets Windows
Os usuários de tablets costumam perder o ponteiro do mouse, especialmente quando costumam usar laptops. Os smartphones e tablets touchscreen vêm com m...