Inserindo logs com Laravel 5.6 e Loggly

Allan Ramos
Training Center
Published in
5 min readFeb 8, 2019

Esse texto é uma tradução livre do artigo Logging with Laravel 5.6 and Loggly de Matthew.

Quando criamos um site é importante saber o que está funcionando, e principalmente, o que não está. É nesse ponto que usar logs é importante. Sim, logar é uma arte algumas vezes esquecida. Mas, como disse Guillaume da Logmatic com toda a razão, “Logs do PHP em particular NÃO SÃO APENAS DE ERROS”. Ele enfatiza esse ponto no texto, e por uma boa razão. Os logs são úteis também para sabermos o que está funcionando. Eu tive esse post do Guillaume como inspiração, e decide fazer esse falando de como logar no Laravel 5.6 com outra ferramenta de logs(desculpa Logmatic, não é você), chamada Loggly.

Objetivos

  • Usar o Laravel 5.6 e não mexer em nenhuma parte do core code;
  • Usar a função nativa de log do Laravel;
  • Capturar erros e informações e colocá-lo em um arquivo de log local;
  • Também enviar todos os logs para uma ferramenta de monitoramento gratuita para uma melhor análise;
  • Garantir que os arquivos de log locais sejam limpos rotineiramente;
  • Garantir que o aplicativo possa me fazer uma xícara de chá.

Eu não acho que esse último objetivo será alcançado, mas espero que dê tudo certo com o resto.

Por que Loggly?

Primeiro e acima de tudo, é grátis, pelo menos para a quantidade que farei uso para este aplicativo. Existem outras ferramentas, e talvez até algumas outras melhores. O Sentry parece muito bom, embora seu uso seja mais voltado para a captura de erros do que de log. Loggly tem uma interface simples para ver os erros e logs que estão vindo da sua aplicação, e já existe um drive do Loggly feito através do pacote do Monolog, que é exatamente o pacote usado pelo Laravel.

Por que Laravel 5.6?

Por que é animal! Mais especificamente, estou escrevendo isso após ter lido outro tutorial de como fazê-lo(incluindo a documentação do Loggly, presente em seu próprio site) apenas no Laravel 5.5 e versões anteriores. Eu usei seu código e minha aplicação lançou um erro. E não, o Loggly não registrou esse erro. Então, se você está usando o Laravel 5.6 e está recebendo um erro com a função configureMonologUsing(), você precisa conferir o guia de atualização do Laravel 5.6, e seguir suas instruções.

Composer

Vamos garantir que você esteja usando a versão mais nova do Monolog.

composer require monolog/monolog

Fácil, fácil.

Integrando com o Loggly

Agora vamos abrir o arquivo config/services.php e adicionar a parte abaixo no array:

Estamos substituindo qualquer espaço por underscore, então o Loggly aceitará a propriedade. Você também perceberá existe um conjunto de parâmetros nesse arquivo, então adicione o seguinte item ao seu .env:

LOGGLY_KEY=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx

Claro que você precisará de uma chave de acesso. Se você ainda não a tem, crie uma conta na Loggly, faça login e vá para Source Setup > Customer Tokens e obtenha seu token.

O item tag no array acima define como o Loggly identificará sua aplicação. Você pode adicionar diversas origens para uma mesma conta, se você desejar, e a tag é o que identifica de onde veio esse log. Incluímos uma referência ao ambiente para diferenciar meus testes locais da produção.

Agora precisaremos informar ao Laravel como inserir os logs no Loggly, e é nessa parte que o processo é diferente do Laravel 5.5. Ao invés de chamar $app->configureMonologUsing(), precisamos configurar uma classe customizado de log. Para ser honesto, parece mais trabalhoso. Eu prefiro o design pattern utilizado aqui. Criaremos o seguinte arquivo com o código abaixo /app/Loggin/LogglyLogger.php:

O código apresentado diz ao Laravel que logs com níveis acima de INFO(o que é praticamente tudo), serão tratados pelo Loggly. Perceba que estamos setando uma tag usando o que foi definido em config/services.php. Agora, tudo que precisamos é fazer é dizer ao Laravel para usá-lo. Vamos abrir /config/logging.php e adicionar o código abaixo ao array:

A channel stacké útil pois significa que podemos mandar nossos logs para mais de 1 canal, o que é exatamente que estamos fazendo nesse caso. Nós desejamos salvar o log local, mas também enviá-lo ao Loggly. Eu sei 'channels=> ['custom' => 'daily']. Você verá que também vinculei essa classe personalizada que criamos.

Com tudo isso configurado, será o que você precisará. Abra seu aplicativo e gere um erro, e ele deverá aparecer no Loggly. Você também deverá encontrar esse erro em storage/logs.

Mais logs

Como eu disse (ou mencionei?) no começo, logs não são apenas para erros. Lembre-se que você pode (e deve) incluir logs de informações úteis de qualquer parte do seu código. Por exemplo, você pode querer logar a quantidade de vezes que o processo de autenticação respondeu 200, ou talvez outra interação. Pense desse modo — se alguém vier a você, descrevendo um problema e você precisar encontrá-lo(track), que informações você precisará? Crie um log disso.

Log::info('User login successful', ['user_id' => $user->id])

GDPR

Uma consideração importante é que logs talvez contenham Informações de Identificação Pessoal(Personally Identifiable Information). De acordo com os regulamentos do GDPR que entraram em vigor em maio de 2018, vale a pena verificar se tratamos esses registros com cuidado.

Um princípio do GDPR é “não armazene I.I.P(P.I.I), a menos que você precise”. Portanto não logue absolutamente nada disso. Deixe anônima essas informações, se possível.

Como você pode ver no meu código acima, eu inseri o ID do usuário, mas não detalhes de login. NUNCA armazene senhas. Uma dica de ouro é: quão embaraçoso/custoso seria se armazenassem seus registros?

Outra dica é, nunca mantenha I.I.P(P.I.I) por tempo desnecessário. Como você define o tempo necessário, aí você tem que debater com seu time, mas isso provavelmente depende do seu aplicativo e do contexto do log. Eu configurei meu aplicativo para armazenar meus dogs diariamente em arquivos separados, ao invés de deixá-los em um único arquivo. A biblioteca Monolog vem com seu próprio meio de reter logs, então podemos simplesmente adicionar a linha abaixo ao arquivo /config/app.php, e com isso os arquivos dos logs serão mantidos por 5 dias:

'log_max_files' => 5

A própria Loggly também está nos assegura que o GDPR é importante para eles também. Atualmente, eles têm uma declaração sobre sua política de privacidade sobre seu compromisso com o GDPR. Não nos dá muitos detalhes, mas tenha certeza que seus dados estão seguros, e em mãos confiáveis, e se você precisar fazer perguntas específicas a eles sobre como e onde suas dados são armazenados, eles terão prazer em lhe ajudar.

Resumo

Laravel e Loggly são incríveis. Integrá-los é relativamente simples. Você pode (e deve) logar os eventos de seus usuários, assim como os erros.

Você pode deixar as pessoas do GDPR felizes apenas registrando o que você precisa, e excluir quando não for mais útil.

--

--