Interface de registro PSR (e por que o registro é importante)
Dois recursos do PHP que acredito serem frequentemente usados em demasia quando se trata de "depuração" são o uso de echo e var_dump. Já falei sobre isso em alguns artigos diferentes sobre depuração (como aqui e aqui ).
E por mais que eu seja fã de usar um depurador, acho importante implementar um tipo de sistema de log para que você ou seu cliente possam voltar e revisar a atividade que está acontecendo dentro do sistema como eles ou seus usuários fizeram foi, você sabe, usá-lo.
No entanto, existem dois aspectos para fazer isso, especialmente se você deseja seguir a interface de registro do PSR e eles são:
- as regras para a interface de registro real,
- um projeto que implementa adequadamente a referida interface de registro.
Então, por que não abordar os dois neste post?
A interface de registro PSR
A interface de registro PSR (ou PSR-3) cobre uma série de coisas sobre as quais você pode ler com mais detalhes na página real.
Esses incluem:
- O básico
- Mensagens
- Contexto
- Classes auxiliares
- Pacotes
- Interfaces
- Níveis de registro
- E mais.
Mas para os propósitos deste artigo, quero falar especificamente sobre a própria interface, um projeto que a implementa e por que é importante.
A interface de registro
A página inicial da documentação afirma:
Este documento descreve uma interface comum para bibliotecas de log.
O objetivo principal é permitir que as bibliotecas recebam um objeto PsrLogLoggerInterface e gravem logs nele de forma simples e universal.
Do ponto de vista do desenvolvimento, isso é bom, certo? Quero dizer, ele fornece uma maneira única e consistente em que podemos apostar em qualquer biblioteca de log que optamos por usar em nossos projetos. Abordarei minha biblioteca preferida mais adiante no artigo.
Para aqueles novatos em programação orientada a objetos ou simplesmente curiosos sobre como uma interface consistente nos beneficia, pense da seguinte maneira: independentemente do sistema escolhido, você tem a garantia de ter um certo conjunto de funções, estados e assim por diante. pode usar em sua aplicação.
Em última análise, adicionar um sistema de registro que tenha um padrão pelo qual ele deve seguir oferece uma variedade de benefícios, independentemente de qual biblioteca você escolher (desde que esteja em conformidade com o PSR-3).
Experimente o Monólogo
Monolog é mais ou menos o utilitário de registro de fato para aplicativos PHP.
É fácil adicionar o projeto via Composer, mas também inclui várias maneiras diferentes de gerar dados:
O Monolog envia seus logs para arquivos, soquetes, caixas de entrada, bancos de dados e vários serviços da web. Veja a lista completa de manipuladores abaixo. Manipuladores especiais permitem que você crie estratégias avançadas de registro.
Pessoalmente, usei-o apenas no contexto de envio de saída para arquivos; no entanto, ter a capacidade de enviá-lo para outros sistemas (especialmente bancos de dados, como quando se trabalha com o WordPress) é bom. Claro, você não quer abusar dessa habilidade.
Em segundo lugar, é importante reconhecer que, embora você possa instanciar o Logger em uma função ou outra classe, existem outras maneiras mais orientadas a objetos de fazer isso. O PSR-3 cobre isso (como mencionado acima).
Resumindo, você quer ter certeza de que sua classe aceita uma instância de uma classe que implementa o LoggerInterface. O Monolog implementa essa interface, então não há problema.
Além disso, o que acontece quando você tem um grupo de classes relacionadas que precisam implementar o log?
- Essas classes herdam de um pai comum?
- Essas classes implementam uma característica? (Esta é uma opção que um amigo me apresentou recentemente.)
- Cada classe simplesmente aceita a dependência via injeção de construtor?
Existem várias maneiras pelas quais os registradores podem ser adicionados a uma classe e isso depende de como seu projeto está organizado.
Mais sobre registro
De qualquer forma, a introdução do log em um aplicativo é importante por vários motivos, como a capacidade de solucionar problemas quando algo não está se comportando conforme o esperado no desenvolvimento, na preparação e especialmente na produção.
