{"id":234117,"date":"2022-12-08T09:59:00","date_gmt":"2022-12-08T06:59:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234117"},"modified":"2022-12-08T10:00:54","modified_gmt":"2022-12-08T07:00:54","slug":"escrevendo-mensagens-no-log-de-depuracao-do-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/escrevendo-mensagens-no-log-de-depuracao-do-wordpress\/","title":{"rendered":"Escrevendo mensagens no log de depura\u00e7\u00e3o do WordPress"},"content":{"rendered":"\n<p>Sempre que estou trabalhando em um projeto, geralmente tenho o WordPress definido no <strong><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/ferramentas-nativas-de-depuracao-do-wordpress-que-nao-exigem-um-ide\/\" title=\"modo de depura\u00e7\u00e3o\">modo de depura\u00e7\u00e3o<\/a><\/strong> e gosto de escrever mensagens no log de erros que posso visualizar, rastrear e seguir facilmente sempre que estou trabalhando em um projeto.<\/p>\n<p>Quando eu fa\u00e7o isso, existem duas maneiras (e s\u00f3 depende do projeto):<\/p>\n<ul>\n<li>Vou usar uma biblioteca como <strong><a href=\"https:\/\/github.com\/Seldaek\/monolog\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Monolog<\/a><\/strong> ,<\/li>\n<li>Usarei minha pr\u00f3pria fun\u00e7\u00e3o de log simples.<\/li>\n<\/ul>\n<p>Neste post, vou abordar o \u00faltimo. Ou seja, vou compartilhar como escrevo mensagens no log de depura\u00e7\u00e3o do WordPress e, em seguida, algumas das coisas que voc\u00ea pode precisar prestar aten\u00e7\u00e3o sempre que estiver fazendo o mesmo.<\/p>\n<h2>O log de depura\u00e7\u00e3o do WordPress<\/h2>\n<p>Primeiro, \u00e9 importante notar que a fun\u00e7\u00e3o que vou compartilhar geralmente est\u00e1 no contexto de uma classe base.<\/p>\n<p>Digamos que eu tenha um <strong>AbstractSubscriber<\/strong> que todos os meus assinantes implementam (como um <strong>ScriptAssetSubscriber<\/strong> para registrar e enfileirar o arquivo JavaScript).<\/p>\n<p>O <strong>AbstractSubscriber<\/strong> incluir\u00e1 esta fun\u00e7\u00e3o para que possa ser chamada por qualquer classe filha. <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/d8bed85851dad283183d84a819dd6c9a#file-00-log-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">A fun\u00e7\u00e3o \u00e9 bem simples:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n\/**\n * Prints a message to the debug file that can easily be called by any subclass.\n *\n * @param mixed $message      an object, array, string, number, or other data to write to the debug log\n * @param bool  $shouldNotDie whether or not the The function should exit after writing to the log\n *\n *\/\nprotected function log($message, $shouldNotDie = true)\n{\n    error_log(print_r($message, true));\n    if ($shouldNotDie) {\n        exit;\n    }\n}<\/code><\/pre>\n<p>Mas h\u00e1 v\u00e1rias coisas sobre essa fun\u00e7\u00e3o que podem violar um princ\u00edpio ou desencadear erros em ferramentas de qualidade de c\u00f3digo.<\/p>\n<h3>Argumentos booleanos opcionais<\/h3>\n<p>Sempre que uma fun\u00e7\u00e3o aceita um argumento booleano opcional, pode indicar que uma fun\u00e7\u00e3o tem mais de uma responsabilidade (violando assim o <a href=\"https:\/\/en.wikipedia.org\/wiki\/Single_responsibility_principle\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Princ\u00edpio da Responsabilidade \u00danica<\/a> ).<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162356-61e73cdb388b5.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-162356-61e73cdb388b5.png\" alt=\"Escrevendo mensagens no log de depura\u00e7\u00e3o do WordPress\"><\/a><\/p>\n<p>A raz\u00e3o pela qual isso violaria o referido princ\u00edpio \u00e9 que d\u00e1 a um m\u00f3dulo mais de uma raz\u00e3o para mudar.<\/p>\n<p>Estou confort\u00e1vel em permitir que isso seja escrito dessa maneira porque o uso para depura\u00e7\u00e3o, n\u00e3o para ambientes de produ\u00e7\u00e3o, e porque h\u00e1 momentos em que posso querer interromper a execu\u00e7\u00e3o e h\u00e1 momentos em que n\u00e3o.<\/p>\n<p>E claro, eu poderia escrever duas fun\u00e7\u00f5es separadas, mas se esta for a \u00fanica fun\u00e7\u00e3o fazendo isso, estou bem com isso.<\/p>\n<h3>Declara\u00e7\u00f5es de Sa\u00edda Proibida<\/h3>\n<p>Outras ferramentas de qualidade de c\u00f3digo n\u00e3o gostam da instru\u00e7\u00e3o <strong>exit<\/strong> (e, da mesma forma, n\u00e3o gostam da instru\u00e7\u00e3o <strong>die<\/strong> ). E compreensivelmente: eles normalmente param o programa quando dever\u00edamos estar lan\u00e7ando uma exce\u00e7\u00e3o, retornando um valor ou geralmente fazendo algo para lidar com a situa\u00e7\u00e3o normalmente.<\/p>\n<p>Novamente, por\u00e9m, como nesta fun\u00e7\u00e3o h\u00e1 momentos em que quero interromper a execu\u00e7\u00e3o, estou bem lidando com as consequ\u00eancias de ter a linha de c\u00f3digo na fun\u00e7\u00e3o.<\/p>\n<p>Alternativamente, eu poderia usar <strong>wp_die(),<\/strong> e a maioria das ferramentas de qualidade de c\u00f3digo provavelmente n\u00e3o o pegaria, mas isso est\u00e1 mascarando o problema principal. Se alguma coisa, talvez seja melhor apenas suprimir o aviso usando qualquer diretiva que seu sniffer de escolha permitir.<\/p>\n<h2>Independentemente disso, registre a mensagem<\/h2>\n<p>Em \u00faltima an\u00e1lise, o objetivo da fun\u00e7\u00e3o acima \u00e9 fornecer uma maneira simples de gravar no log de depura\u00e7\u00e3o do WordPress e, opcionalmente, interromper a execu\u00e7\u00e3o do programa ao faz\u00ea-lo.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162356-61e73ce108d1e.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-162356-61e73ce108d1e.png\" alt=\"Escrevendo mensagens no log de depura\u00e7\u00e3o do WordPress\"><\/a><\/p>\n<p>Claramente, n\u00e3o est\u00e1 isento de problemas, e existem bibliotecas de maior qualidade dispon\u00edveis, mas \u00e0s vezes voc\u00ea n\u00e3o precisa de uma marreta para um percevejo problem\u00e1tico.<\/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>Aqui est\u00e1 uma fun\u00e7\u00e3o simples para escrever no log de depura\u00e7\u00e3o do WordPress (n\u00e3o sem algumas ressalvas). Costumo us\u00e1-lo no c\u00f3digo local ao trabalhar com classes abstratas.<\/p>\n","protected":false},"author":1,"featured_media":235343,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,806,867],"tags":[1170],"class_list":["post-234117","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-php-8","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/234117","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=234117"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/234117\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/235343"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=234117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=234117"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=234117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}