Os arquivos de log do Symfony são formatados da mesma maneira para todos os ambientes. Isso significa que dev.log
é otimizado para máquinas em vez de humanos. O resultado é um arquivo de log cheio de informações inúteis que tornam você menos produtivo.
EasyLogHandler é um novo manipulador Monolog que cria arquivos de log amigáveis. É otimizado para exibir as informações de log de forma clara e concisa. Use-o no ambiente de desenvolvimento para se tornar um desenvolvedor muito mais produtivo.
Características
Instalação
Configuração e uso
Estes são alguns dos melhores recursos do EasyLogHandler e como ele se compara aos logs padrão do Symfony.
Os arquivos de log do Symfony são um enorme fluxo de texto. Ao abri-los, você não pode saber facilmente quando uma solicitação foi iniciada ou concluída e quais mensagens de log pertencem uma à outra:
Symfony | EasyLogHandler |
---|---|
EasyLogHandler estrutura os arquivos de log de uma maneira diferente:
Ele adiciona um cabeçalho grande e algumas novas linhas para separar os logs de cada solicitação;
Se a solicitação for menos significativa (ex. solicitações Assetic) o cabeçalho é mais compacto e exibe menos informações;
As mensagens de log são divididas internamente para que você possa entender melhor suas diferentes partes (solicitação, doutrina, segurança, etc.)
Primeiro de tudo, EasyLogHandler não exibe o carimbo de data/hora em todas as mensagens de log. No ambiente dev
você não deve se preocupar com isso, então o carimbo de data/hora só é exibido uma vez para cada grupo de mensagens de log.
Symfony | EasyLogHandler |
---|---|
As informações extra
, que algumas mensagens de log incluem para adicionar mais detalhes sobre o log, são exibidas somente quando são diferentes do log anterior. Em contrapartida, o Symfony sempre exibe o extra
para todos os logs, gerando muitas informações duplicadas:
Symfony |
---|
EasyLogHandler |
---|
Está se tornando cada vez mais popular usar espaços reservados em mensagens de log em vez dos valores reais (por exemplo, Matched route "{route}".
em vez de Matched route "home".
) Isso é ótimo para máquinas, porque elas podem agrupar mensagens semelhantes que variam apenas em os valores do espaço reservado.
No entanto, para os humanos esta “característica” é perturbadora. É por isso que EasyLogHandler substitui automaticamente qualquer espaço reservado incluído na mensagem de log:
Symfony |
---|
EasyLogHandler |
---|
Elementos importantes, como descontinuações e mensagens relacionadas à segurança, devem se destacar nos arquivos de log para ajudá-lo a identificá-los instantaneamente. No entanto, no Symfony todos os logs parecem exatamente iguais. Como você pode saber quais são os importantes?
Symfony |
---|
(todas as mensagens parecem exatamente iguais) |
EasyLogHandler |
---|
(destacam-se depreciações, avisos, erros e mensagens de segurança) |
As mensagens de log geralmente contêm variáveis relacionadas em seu context
e propriedades extra
. Exibir o conteúdo dessas variáveis nos arquivos de log é sempre um equilíbrio difícil entre legibilidade e concisão.
EasyLogHandler decide como incorporar essas variáveis dinamicamente dependendo de cada mensagem de log. Por exemplo, os parâmetros de consulta do Doctrine são sempre embutidos, mas os parâmetros de solicitação são embutidos para solicitações sem importância e aninhados para solicitações importantes:
Quando as mensagens de log incluem rastreamentos de pilha de erros, você definitivamente deseja dar uma olhada nelas. No entanto, o Symfony exibe stack traces embutidos, tornando-os impossíveis de inspecionar. EasyLogHandler os exibe como rastreamentos de pilha adequados:
Symfony |
---|
EasyLogHandler |
---|
Uma das experiências mais frustrantes ao inspecionar arquivos de log é receber muitas mensagens consecutivas repetidas ou semelhantes. Eles fornecem poucas informações e apenas distraem você. EasyLogHandler processa todas as mensagens de log de uma vez, em vez de uma por uma, para saber quando há logs consecutivos semelhantes.
Por exemplo, este é um arquivo de log do Symfony exibindo três mensagens consecutivas de tradução ausente:
E é assim que as mesmas mensagens são exibidas pelo EasyLogHandler:
A diferença fica ainda mais evidente para mensagens de “evento notificado”, que costumam gerar dezenas de mensagens consecutivas:
Symfony |
---|
EasyLogHandler |
---|
Este projeto é distribuído como um pacote PHP em vez de um pacote Symfony, então você só precisa requerer o projeto com o Composer:
$ compositor requer --dev easycorp/easy-log-handler
Defina um novo serviço no seu aplicativo para este manipulador de log:
Versão mais recente do Symfony:
# config/packages/dev/easy_log_handler.yamlservices:EasyCorpEasyLogEasyLogHandler:public: falsearguments: ['%kernel.logs_dir%/%kernel.environment%.log']
Versão mais antiga do Symfony:
# app/config/services.ymlservices:# ...easycorp.easylog.handler:class: EasyCorpEasyLogEasyLogHandlerpublic: falsearguments: - '%kernel.logs_dir%/%kernel.environment%.log'
Atualize sua configuração do Monolog no ambiente dev
para definir um manipulador em buffer que envolva esse novo serviço de manipulador (continue lendo para entender o porquê). Você pode copiar e colar com segurança esta configuração:
Versão mais recente do Symfony:
# config/packages/dev/monolog.yamlmonolog:handlers:buffered:type: bufferhandler: easylogchannels: ['!event']level: debugeasylog:type: serviceid: EasyCorpEasyLogEasyLogHandler
Versão mais antiga do Symfony:
# app/config/config_dev.ymlmonolog:handlers:buffered:type: bufferhandler: easylogchannels: ["!event"]level: debugeasylog:type: serviceid: easycorp.easylog.handler
A maioria dos manipuladores de log trata cada mensagem de log separadamente. Por outro lado, o processamento avançado de log do EasyLogHandler exige que cada mensagem de log esteja ciente dos outros logs (por exemplo, para mesclar mensagens consecutivas semelhantes). Isso significa que todos os logs associados à solicitação devem ser capturados e processados em lote.
Na configuração acima, o manipulador buffered
salva todas as mensagens de log e depois as passa para o manipulador EasyLog, que processa todas as mensagens de uma vez e grava o resultado no arquivo de log.
Use o manipulador buffered
para configurar os canais registrados/excluídos e o nível das mensagens que estão sendo registradas.