{"id":230383,"date":"2022-12-04T09:57:00","date_gmt":"2022-12-04T06:57:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230383"},"modified":"2022-12-04T17:19:40","modified_gmt":"2022-12-04T14:19:40","slug":"lectura-y-comprension-de-los-registros-de-errores-de-wordpress-parte-2","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/lectura-y-comprension-de-los-registros-de-errores-de-wordpress-parte-2\/","title":{"rendered":"Lectura y comprensi\u00f3n de los registros de errores de WordPress, parte 2"},"content":{"rendered":"\n<p><strong><a href=\"https:\/\/wordpress.mediadoma.com\/es\/lectura-y-comprension-de-los-registros-de-errores-de-wordpress-parte-1\/\" title=\"La \u00faltima vez\">La \u00faltima vez<\/a><\/strong>, analizamos lo siguiente:<\/p>\n<ol>\n<li>configurar constantes de depuraci\u00f3n,<\/li>\n<li>localizar un archivo de registro de errores,<\/li>\n<li>comprender c\u00f3mo leer el archivo de registro,<\/li>\n<li>comprender los rastros de la pila<\/li>\n<li>entender c\u00f3mo leer la pila<\/li>\n<\/ol>\n<p>Tan agradable como es, sigue siendo importante comprender c\u00f3mo escribir datos en el registro de errores desde un aspecto program\u00e1tico. Es decir; una cosa es si su trabajo arroja errores, advertencias o avisos.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162973-61e747bcebed4.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-162973-61e747bcebed4.png\" alt=\"Lectura y comprensi\u00f3n de los registros de errores de WordPress, parte 2\"><\/a><\/p>\n<p>Otra cosa es si desea comprender c\u00f3mo escribir informaci\u00f3n en el archivo para investigar y depurar manualmente.<\/p>\n<p>En esta publicaci\u00f3n, continuaremos haciendo exactamente eso para mejorar nuestra comprensi\u00f3n de los registros de errores de WordPress.<\/p>\n<h2>Comprender los registros de errores de WordPress, parte 2<\/h2>\n<p>\u00bfCu\u00e1l es el punto de escribir en el registro de errores, de todos modos? Quiero decir, \u00bfes siquiera parte del proceso de depuraci\u00f3n?<\/p>\n<p>De <strong><a href=\"https:\/\/wordpress.mediadoma.com\/es\/lectura-y-comprension-de-los-registros-de-errores-de-wordpress-parte-1\/\" title=\"la publicaci\u00f3n anterior\">la publicaci\u00f3n anterior<\/a><\/strong> :<\/p>\n<blockquote>\n<p>Pero, \u00bfqu\u00e9 pasa en el caso de que queramos volcar algo para obtener informaci\u00f3n sobre lo que est\u00e1 viendo WordPress o PHP? Eso tambi\u00e9n es \u00fatil.<\/p>\n<\/blockquote>\n<p>Cuando los programadores piensan en la depuraci\u00f3n, muchos de ellos piensan en usar un depurador real (es decir, una pieza de software), establecer puntos de interrupci\u00f3n y recorrer el c\u00f3digo para observar el valor de las variables a medida que se ejecuta el programa.<\/p>\n<p>Vamos a llegar a ese punto, pero antes de hacerlo, echemos un vistazo a c\u00f3mo podemos escribir en el registro de errores nosotros mismos para darnos una idea de c\u00f3mo est\u00e1 funcionando nuestro trabajo.<\/p>\n<p>Despu\u00e9s de todo, una cosa es que nuestro trabajo arroje advertencias, errores y avisos. Es otra si hay informaci\u00f3n que queremos ver. Y ah\u00ed es donde entra en juego escribir en el registro de errores.<\/p>\n<h3>Comprender las funciones de PHP<\/h3>\n<p>Para escribir en el registro de errores, es importante comprender dos funciones de PHP:<\/p>\n<ol>\n<li><strong><a href=\"https:\/\/secure.php.net\/manual\/en\/function.error-log.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">registro de errores<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/secure.php.net\/manual\/en\/function.print-r.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">imprimir_r<\/a><\/strong><\/li>\n<\/ol>\n<p>En lo que respecta a la funci\u00f3n error_log, tenga en cuenta que su prop\u00f3sito es:<\/p>\n<blockquote>\n<p>Enviar un mensaje de error a las rutinas de manejo de errores definidas<\/p>\n<\/blockquote>\n<p>En la mayor\u00eda de los casos, esto est\u00e1 configurado para escribir en el archivo de registro por nosotros a trav\u00e9s de la configuraci\u00f3n predeterminada de WordPress y PHP. Pero hay m\u00e1s que eso porque a menudo vamos a querer mostrar los valores de variables, arreglos, objetos, etc.<\/p>\n<p>Para ese fin, debe poder usar <strong>print_r<\/strong> junto con <strong>error_log<\/strong>. <strong>print_r<\/strong> hace lo siguiente:<\/p>\n<blockquote>\n<p>Imprime informaci\u00f3n legible por humanos sobre una variable<\/p>\n<\/blockquote>\n<p>Y si lee el manual, notar\u00e1 que se necesitan dos argumentos, el segundo de los cuales debe establecerse en <strong>verdadero<\/strong> si desea que el resultado de una funci\u00f3n se imprima en el archivo de registro.<\/p>\n<p>Espec\u00edficamente, como dice el manual:<\/p>\n<blockquote>\n<p>Si desea capturar la salida de <strong>print_r()<\/strong>, use el <code>return<\/code>par\u00e1metro. Cuando este par\u00e1metro se establece en <strong><code>TRUE<\/code><\/strong>, <strong>print_r()<\/strong> devolver\u00e1 la informaci\u00f3n en lugar de imprimirla.<\/p>\n<\/blockquote>\n<p>Entonces, la idea general de escribir nuestro valor de una matriz, digamos $exampleArray, se ver\u00eda <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/426e02bcfc411d43be6715b3e84ead7e#file-13-error-log-print-r-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">as\u00ed<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\nerror_log(print_r($exampleArray, true));<\/code><\/pre>\n<p>Pero, \u00bfqu\u00e9 pasa dentro del contexto de WordPress?<\/p>\n<h3>Escribir valores en el registro de errores en WordPress<\/h3>\n<p>Entonces, lo anterior describe las funciones integradas en PHP que necesitamos, pero \u00bfc\u00f3mo se ve esto en el contexto del desarrollo de WordPress?<\/p>\n<p>Para hacer esto, digamos que hemos implementado una versi\u00f3n del <strong><a href=\"https:\/\/wordpress.mediadoma.com\/es\/usando-el-patron-de-registro-en-wordpress\/\" title=\"patr\u00f3n de registro\">patr\u00f3n de registro<\/a><\/strong>. En nuestra implementaci\u00f3n del patr\u00f3n, tambi\u00e9n tenemos un m\u00e9todo llamado <strong>inicio<\/strong> al que podemos llamar una vez que todos nuestros objetos se hayan agregado al registro.<\/p>\n<p>Puede verse algo <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/426e02bcfc411d43be6715b3e84ead7e#file-14-start-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">como esto:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n\/**\n * Starts all of the objects stored is the registry by calling\n * the `start` method that's available on each of the objects.\n *\/\npublic function start()\n{\n    foreach ($this-&gt;storage as $obj) {\n        $obj-&gt;start();\n    }\n}<\/code><\/pre>\n<p>Ahora, en lo que respecta a la implementaci\u00f3n, esto es sencillo. Pero, \u00bfqu\u00e9 pasa si queremos ver qu\u00e9 objetos se invocan a trav\u00e9s de cada iteraci\u00f3n del ciclo?<\/p>\n<p>La idea detr\u00e1s de esto es que podemos iterar a trav\u00e9s de los objetos almacenados y llamar a un m\u00e9todo en cada uno de ellos. Esto se basa en la idea de que cada uno de los objetos tiene un m\u00e9todo disponible en cada uno de ellos (que se puede aplicar mediante una <strong><a href=\"https:\/\/wordpress.mediadoma.com\/es\/programacion-orientada-a-objetos-comprension-de-las-interfaces\/\" title=\"interfaz\">interfaz<\/a><\/strong> ).<\/p>\n<p>Primero, esto plantea una pregunta: \u00bfPor qu\u00e9 podemos querer hacer eso? Debido a la naturaleza del sistema de gesti\u00f3n de eventos de WordPress, tal vez queramos asegurarnos de que todos los objetos que esperamos que se disparen se disparen.<\/p>\n<p>En segundo lugar, \u00bfc\u00f3mo podemos ver qu\u00e9 objetos se est\u00e1n invocando? Aqu\u00ed es donde entra en juego la escritura en el registro de errores. Usando los m\u00e9todos que hemos descrito anteriormente, una forma de hacerlo ser\u00eda hacer <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/426e02bcfc411d43be6715b3e84ead7e#file-15-view-stored-objects-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">lo siguiente<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Starts all of the objects stored is the registry by calling\n * the `start` method that's available on each of the objects.\n *\/\npublic function start()\n{\n    foreach ($this-&gt;storage as $obj) {\n        error_log(print_r($obj, true));\n        $obj-&gt;start();\n    }\n}<\/code><\/pre>\n<p>Esto dar\u00e1 como resultado la siguiente salida:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162973-61e747c0a5923.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-162973-61e747c0a5923.png\" alt=\"Lectura y comprensi\u00f3n de los registros de errores de WordPress, parte 2\"><\/a><\/p>\n<p>Aqu\u00ed, puedes ver el objeto; su espacio de nombres, sus valores de propiedad (incluso si las propiedades son privadas, protegidas, p\u00fablicas, etc.).<\/p>\n<p>A partir de ah\u00ed, puede hacer un poco de depuraci\u00f3n si el resultado es lo que no esperaba o tal vez pueda usar esto para verificar que su c\u00f3digo est\u00e1 haciendo lo que esperaba.<\/p>\n<p>Sin embargo, este es solo un ejemplo. Sin embargo, podr\u00eda volcar los valores de la variable <strong>$storage<\/strong> antes incluso de iterar a trav\u00e9s del bucle. Esa elecci\u00f3n realmente depende de usted y de lo que est\u00e1 buscando lograr.<\/p>\n<h2>Uso de los complementos instalados<\/h2>\n<p>En este punto, hemos cubierto los aspectos b\u00e1sicos de la depuraci\u00f3n de c\u00f3digo mediante el uso de registros de errores.<\/p>\n<p>Sin embargo, ahora debemos centrar nuestra atenci\u00f3n en los complementos que se discutieron hace algunas publicaciones. Despu\u00e9s de eso, eventualmente trabajaremos en nuestro camino hacia Xdebug.<\/p>\n<p>Pero a continuaci\u00f3n, veremos las herramientas disponibles para nosotros desde el mismo WordPress.<\/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>Otra cosa es si desea comprender c\u00f3mo escribir manualmente informaci\u00f3n en el archivo con fines de investigaci\u00f3n y depuraci\u00f3n. En esta publicaci\u00f3n, continuaremos haciendo exactamente eso para mejorar nuestra comprensi\u00f3n de los registros de errores de WordPress.<\/p>\n","protected":false},"author":1,"featured_media":162974,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,840],"tags":[1172],"class_list":["post-230383","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-tutoriales","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230383","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=230383"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230383\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/162974"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=230383"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=230383"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=230383"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}