{"id":229736,"date":"2022-11-09T16:25:00","date_gmt":"2022-11-09T13:25:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229736"},"modified":"2022-11-09T16:25:08","modified_gmt":"2022-11-09T13:25:08","slug":"interface-de-registro-psr-e-por-que-o-registro-e-importante","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/interface-de-registro-psr-e-por-que-o-registro-e-importante\/","title":{"rendered":"Interface de registro PSR (e por que o registro \u00e9 importante)"},"content":{"rendered":"\n<p>Dois recursos do PHP que acredito serem frequentemente usados \u200b\u200bem demasia quando se trata de &quot;depura\u00e7\u00e3o&quot; s\u00e3o o uso de <a href=\"https:\/\/php.net\/manual\/en\/function.echo.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">echo<\/a> e <a href=\"https:\/\/php.net\/manual\/en\/function.var-dump.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">var_dump<\/a>. J\u00e1 falei sobre isso em alguns artigos diferentes sobre depura\u00e7\u00e3o (como <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/usando-xdebug-com-valet-e-wordpress\/\" title=\"aqui\">aqui<\/a> e <a href=\"https:\/\/tommcfarlin.com\/debugging-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aqui<\/a> ).<\/p>\n<p>E por mais que eu seja f\u00e3 de usar um depurador, acho importante implementar um tipo de sistema de log para que voc\u00ea ou seu cliente possam voltar e revisar a atividade que est\u00e1 acontecendo dentro do sistema como eles ou seus usu\u00e1rios fizeram foi, voc\u00ea sabe, us\u00e1-lo.<\/p>\n<p>No entanto, existem dois aspectos para fazer isso, especialmente se voc\u00ea deseja seguir a interface de registro do PSR e eles s\u00e3o:<\/p>\n<ol>\n<li>as regras para a interface de registro real,<\/li>\n<li>um projeto que implementa adequadamente a referida interface de registro.<\/li>\n<\/ol>\n<p>Ent\u00e3o, por que n\u00e3o abordar os dois neste post?<\/p>\n<h2>A interface de registro PSR<\/h2>\n<p>A <a href=\"http:\/\/www.php-fig.org\/psr\/psr-3\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">interface de registro PSR<\/a> (ou PSR-3) cobre uma s\u00e9rie de coisas sobre as quais voc\u00ea pode ler com mais detalhes na p\u00e1gina real.<\/p>\n<p>Esses incluem:<\/p>\n<ol>\n<li>O b\u00e1sico<\/li>\n<li>Mensagens<\/li>\n<li>Contexto<\/li>\n<li>Classes auxiliares<\/li>\n<li>Pacotes<\/li>\n<li>Interfaces<\/li>\n<li>N\u00edveis de registro<\/li>\n<li>E mais.<\/li>\n<\/ol>\n<p>Mas para os prop\u00f3sitos deste artigo, quero falar especificamente sobre a pr\u00f3pria interface, um projeto que a implementa e por que \u00e9 importante.<\/p>\n<h3>A interface de registro<\/h3>\n<p>A p\u00e1gina inicial da documenta\u00e7\u00e3o afirma:<\/p>\n<blockquote>\n<p>Este documento descreve uma interface comum para bibliotecas de log.<\/p>\n<p>O objetivo principal \u00e9 permitir que as bibliotecas recebam um objeto PsrLogLoggerInterface e gravem logs nele de forma simples e universal.<\/p>\n<\/blockquote>\n<p>Do ponto de vista do desenvolvimento, isso \u00e9 bom, certo? Quero dizer, ele fornece uma maneira \u00fanica 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.<\/p>\n<p>Para aqueles novatos em programa\u00e7\u00e3o orientada a objetos ou simplesmente curiosos sobre como uma interface consistente nos beneficia, pense da seguinte maneira: independentemente do sistema escolhido, voc\u00ea tem a garantia de ter um certo conjunto de fun\u00e7\u00f5es, estados e assim por diante. pode usar em sua aplica\u00e7\u00e3o.<\/p>\n<p>Em \u00faltima an\u00e1lise, adicionar um sistema de registro que tenha um padr\u00e3o pelo qual ele deve seguir oferece uma variedade de benef\u00edcios, independentemente de qual biblioteca voc\u00ea escolher (desde que esteja em conformidade com o PSR-3).<\/p>\n<h3>Experimente o Mon\u00f3logo<\/h3>\n<p><a href=\"https:\/\/github.com\/Seldaek\/monolog\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Monolog<\/a> \u00e9 mais ou menos o utilit\u00e1rio de registro de fato para aplicativos PHP.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166191-61e78fbe1b295.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166191-61e78fbe1b295.png\" alt=\"Interface de registro PSR (e por que o registro \u00e9 importante)\"><\/a><\/p>\n<p>\u00c9 f\u00e1cil adicionar o projeto via <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a>, mas tamb\u00e9m inclui v\u00e1rias maneiras diferentes de gerar dados:<\/p>\n<blockquote>\n<p>O Monolog envia seus logs para arquivos, soquetes, caixas de entrada, bancos de dados e v\u00e1rios servi\u00e7os da web. Veja a lista completa de manipuladores abaixo. Manipuladores especiais permitem que voc\u00ea crie estrat\u00e9gias avan\u00e7adas de registro.<\/p>\n<\/blockquote>\n<p>Pessoalmente, usei-o apenas no contexto de envio de sa\u00edda para arquivos; no entanto, ter a capacidade de envi\u00e1-lo para outros sistemas (especialmente bancos de dados, como quando se trabalha com o WordPress) \u00e9 bom. Claro, voc\u00ea n\u00e3o quer abusar dessa habilidade.<\/p>\n<p>Em segundo lugar, \u00e9 importante reconhecer que, embora voc\u00ea possa instanciar o Logger em uma fun\u00e7\u00e3o ou outra classe, existem outras maneiras mais orientadas a objetos de fazer isso. O PSR-3 cobre isso (como mencionado acima).<\/p>\n<p>Resumindo, voc\u00ea quer ter certeza de que sua classe aceita uma inst\u00e2ncia de uma classe que implementa o LoggerInterface. O Monolog implementa essa interface, ent\u00e3o n\u00e3o h\u00e1 problema.<\/p>\n<p>Al\u00e9m disso, o que acontece quando voc\u00ea tem um grupo de classes relacionadas que precisam implementar o log?<\/p>\n<ul>\n<li>Essas classes herdam de um pai comum?<\/li>\n<li>Essas classes implementam uma <a href=\"https:\/\/php.net\/manual\/en\/language.oop5.traits.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">caracter\u00edstica<\/a>? (Esta \u00e9 uma op\u00e7\u00e3o que um amigo me apresentou recentemente.)<\/li>\n<li>Cada classe simplesmente aceita a depend\u00eancia via inje\u00e7\u00e3o de construtor?<\/li>\n<\/ul>\n<p>Existem v\u00e1rias maneiras pelas quais os registradores podem ser adicionados a uma classe e isso depende de como seu projeto est\u00e1 organizado.<\/p>\n<h2>Mais sobre registro<\/h2>\n<p>De qualquer forma, a introdu\u00e7\u00e3o do log em um aplicativo \u00e9 importante por v\u00e1rios motivos, como a capacidade de solucionar problemas quando algo n\u00e3o est\u00e1 se comportando conforme o esperado no desenvolvimento, na prepara\u00e7\u00e3o e especialmente na produ\u00e7\u00e3o.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Se voc\u00ea deseja seguir a interface de registro do PSR, certifique-se de revisar o PSR-3 e verificar o Monolog, que implementa a referida interface do registrador.<\/p>\n","protected":false},"author":1,"featured_media":166192,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[722,846],"tags":[1170],"class_list":["post-229736","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvedor","category-tutoriais","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229736","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=229736"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229736\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/166192"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=229736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=229736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=229736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}