{"id":234122,"date":"2022-12-08T09:36:00","date_gmt":"2022-12-08T06:36:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234122"},"modified":"2022-12-08T09:36:38","modified_gmt":"2022-12-08T06:36:38","slug":"escribir-mensajes-en-el-registro-de-depuracion-de-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/escribir-mensajes-en-el-registro-de-depuracion-de-wordpress\/","title":{"rendered":"Escribir mensajes en el registro de depuraci\u00f3n de WordPress"},"content":{"rendered":"\n<p>Cada vez que estoy trabajando en un proyecto, a menudo tengo WordPress configurado en <strong><a href=\"https:\/\/wordpress.mediadoma.com\/es\/herramientas-nativas-de-depuracion-de-wordpress-que-no-requieren-un-ide\/\" title=\"modo de depuraci\u00f3n\">modo de depuraci\u00f3n<\/a><\/strong>, y me gusta escribir mensajes en el registro de errores que puedo ver, rastrear y seguir f\u00e1cilmente cuando estoy trabajando en un proyecto.<\/p>\n<p>Cuando hago esto, hay dos formas (y solo depende del proyecto):<\/p>\n<ul>\n<li>Usar\u00e9 una 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>Usar\u00e9 mi propia funci\u00f3n de registro simple.<\/li>\n<\/ul>\n<p>En esta publicaci\u00f3n, voy a cubrir esto \u00faltimo. Es decir, voy a compartir c\u00f3mo escribo mensajes en el registro de depuraci\u00f3n de WordPress y luego algunas de las cosas a las que debe prestar atenci\u00f3n cuando est\u00e9 haciendo lo mismo.<\/p>\n<h2>El registro de depuraci\u00f3n de WordPress<\/h2>\n<p>En primer lugar, es importante tener en cuenta que la funci\u00f3n que voy a compartir suele estar en el contexto de una clase base.<\/p>\n<p>Digamos que tengo un <strong>AbstractSubscriber<\/strong> que todos mis suscriptores implementan (como un <strong>ScriptAssetSubscriber<\/strong> para registrar y poner en cola el archivo JavaScript).<\/p>\n<p><strong>AbstractSubscriber<\/strong> incluir\u00e1 esta funci\u00f3n para que cualquier clase secundaria pueda llamarla. <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/d8bed85851dad283183d84a819dd6c9a#file-00-log-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">La funci\u00f3n es bastante simple:<\/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>Pero hay varias cosas sobre esta funci\u00f3n que pueden violar un principio o desencadenar errores en las herramientas de calidad del c\u00f3digo.<\/p>\n<h3>Argumentos booleanos opcionales<\/h3>\n<p>Cada vez que una funci\u00f3n acepta un argumento booleano opcional, puede indicar que una funci\u00f3n tiene m\u00e1s de una responsabilidad (violando as\u00ed el <a href=\"https:\/\/en.wikipedia.org\/wiki\/Single_responsibility_principle\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">principio de responsabilidad \u00fanica<\/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=\"Escribir mensajes en el registro de depuraci\u00f3n de WordPress\"><\/a><\/p>\n<p>La raz\u00f3n por la que esto violar\u00eda dicho principio es que le da a un m\u00f3dulo m\u00e1s de una raz\u00f3n para cambiar.<\/p>\n<p>Me siento c\u00f3modo al permitir que esto se escriba de esta manera porque lo uso para la depuraci\u00f3n, no para entornos de producci\u00f3n, y porque hay ocasiones en las que es posible que desee detener la ejecuci\u00f3n y otras veces no.<\/p>\n<p>Y claro, podr\u00eda escribir dos funciones separadas, pero si esta es la \u00fanica funci\u00f3n que hace esto, estoy de acuerdo con eso.<\/p>\n<h3>Declaraciones de salida prohibida<\/h3>\n<p>A otras herramientas de calidad de c\u00f3digo no les gusta la declaraci\u00f3n de <strong>salida<\/strong> (y, de manera similar, no les gusta la declaraci\u00f3n de <strong>morir<\/strong> ). Y es comprensible: por lo general, detienen el programa por completo cuando deber\u00edamos lanzar una excepci\u00f3n, devolver un valor o, en general, hacer algo para manejar la situaci\u00f3n con gracia.<\/p>\n<p>Una vez m\u00e1s, sin embargo, debido a que en esta funci\u00f3n hay momentos en los que quiero detener la ejecuci\u00f3n, estoy de acuerdo con las consecuencias de tener la l\u00ednea de c\u00f3digo en la funci\u00f3n.<\/p>\n<p>Alternativamente, podr\u00eda usar <strong>wp_die(),<\/strong> y la mayor\u00eda de las herramientas de calidad de c\u00f3digo probablemente no lo detectar\u00edan, pero eso enmascara el problema principal. En todo caso, tal vez sea mejor simplemente suprimir la advertencia usando cualquier directiva que su sniffer de elecci\u00f3n pueda permitir.<\/p>\n<h2>Independientemente, registre el mensaje<\/h2>\n<p>En \u00faltima instancia, el prop\u00f3sito de la funci\u00f3n anterior es proporcionar una forma sencilla de escribir en el registro de depuraci\u00f3n de WordPress y, opcionalmente, detener la ejecuci\u00f3n del programa al hacerlo.<\/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=\"Escribir mensajes en el registro de depuraci\u00f3n de WordPress\"><\/a><\/p>\n<p>Claramente no est\u00e1 exento de problemas, y hay bibliotecas de mayor calidad disponibles, pero a veces no necesitas un mazo para una chincheta de problemas.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aqu\u00ed hay una funci\u00f3n simple para escribir en el registro de depuraci\u00f3n de WordPress (no sin algunas advertencias). Tiendo a usarlo en c\u00f3digo local cuando trabajo con clases abstractas.<\/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":[892,800,861],"tags":[1172],"class_list":["post-234122","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-php-2","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/234122","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=234122"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/234122\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/235343"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=234122"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=234122"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=234122"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}