Generar y analizar registros
Objetivos de aprendizaje
- Ver registros de depuración en Log Inspector o en un editor de texto.
- Establecer varios niveles de registro para sus registros de depuración.
- Gestionar y cambiar entre perspectivas mediante Log Inspector.
Ver registros de depuración
Como buen comandante, debe revisar los registros del sistema para comprobar que todo funciona correctamente. Los registros son una de las mejores ubicaciones para identificar problemas en un sistema o programa. Con Developer Console, puede examinar varios registros de depuración para comprender el funcionamiento del código e identificar cualquier problema de desempeño.
Ver registros en el editor de texto
La visualización de un registro de depuración es un proceso sencillo. Para generar un registro, vamos a ejecutar la clase de Apex EmailMissionSpecialist
que ha creado anteriormente.
- Antes de la ejecución, active Open Log (Abrir registro) en la ventana Enter Apex Code (Introducir código Apex). El registro se abre una vez que se ha ejecutado el código.
- Después de la ejecución, haga doble clic en el registro que se muestra en la ficha Logs (Registros).
- Seleccione Debug (Depurar) | Open Execute Anonymous Window (Abrir ventana de ejecución anónima).
- En la ventana Enter Apex Code (Introducir código Apex) se muestra el último código que ha introducido para su ejecución. Si es distinto del código mostrado a continuación, elimínelo y pegue el siguiente código. Asegúrese de sustituir Enter your email address por su dirección de correo electrónico.
EmailMissionSpecialist em = new EmailMissionSpecialist(); em.sendMail('Enter your email address', 'Flight Path Change', 'Mission Control 123: Your flight path has been changed to avoid collision ' + 'with asteroid 2014 QO441.');
- Seleccione la opción Open Log (Abrir registro).
- Haga clic en Execute (Ejecutar).
Dado que es probable que el registro de ejecución que ve parezca una mezcla confusa de números y palabras, vamos a explicar cómo puede leer e interpretar los datos del registro.
Leer los datos del registro
Vamos a ejecutar de nuevo la clase EmailMissionSpecialist
, pero esta vez vamos a incluir un error. A continuación, vamos a buscar el registro resultante en la ficha Logs (Registros).
- Seleccione Debug (Depurar) | Open Execute Anonymous Window (Abrir ventana de ejecución anónima). Especifique una dirección de correo electrónico no válida, como
testingemail
.EmailMissionSpecialist em = new EmailMissionSpecialist(); em.sendMail('testingemail', 'Flight Path Change', 'Mission Control 123: Your flight path has been changed to avoid collision ' + 'with asteroid 2014 QO441.');
- Anule la selección de la opción Open Log (Abrir registro).
- Haga clic en Execute (Ejecutar). Después de ejecutar el código, se muestra un cuadro de diálogo que incluye el error.
- Haga clic en OK (Aceptar) y, a continuación, haga doble clic en el nuevo registro en la ficha Logs (Registros). Si no sabe con certeza qué registro es el más reciente, haga clic en el encabezado de la columna Time (Hora) para ordenar los registros según la hora a la que se han generado.
- Timestamp (Marca de tiempo). Es la hora de generación del evento. La marca de tiempo siempre se corresponde con la zona horaria del usuario y tiene el formato HH:mm:ss:SSS.
-
Event (Evento). Es el evento que desencadena la entrada del registro de depuración. Por ejemplo, en el registro de ejecución que ha generado, se registra el evento
FATAL_ERROR
cuando se determina que la dirección de correo electrónico no es válida. - Details (Detalles). Se especifican los detalles de la línea de código y el nombre del método cuando se ejecutó el código.
Para cambiar lo que se muestra en Execution Log (Registro de ejecución), seleccione This Frame (Este marco) (a), Executable (Ejecutable) (b) o Debug Only (Solo depurar) (c). La selección de estas opciones muestra solamente determinados tipos de eventos. Por ejemplo, Debug Only (Solo depurar) muestra los eventos USER_DEBUG. Además, puede filtrar distintas partes del registro con Filter (Filtrar) (d). Escriba el nombre de un método o cualquier otro texto específico que esté buscando para que el registro filtre los resultados.
Asimismo, puede ver el registro de depuración como un registro sin procesar, el cual muestra más información. Seleccione File (Archivo) | Open Raw Log (Abrir registro sin procesar). La marca de tiempo de un registro sin procesar muestra el tiempo transcurrido en nanosegundos (entre paréntesis) desde el inicio del evento.
Esta combinación de la marca de tiempo, el evento y los detalles permite obtener perspectivas muy útiles del funcionamiento del código y los errores que se producen.
Aunque toda esta información es muy valiosa, ¿qué ocurre si desea echar un vistazo rápido a determinados valores del registro de depuración? Obviamente, tiene muchas otras responsabilidades como comandante. En este caso, una solución perfecta es usar el método System.debug()
en Apex.
La gran ventaja del método System.debug()
es que puede agregarlo en cualquier ubicación del código para hacer un seguimiento de los valores, lo que facilita la depuración de su propio código.
System.debug()
. Para mostrar un mensaje, use:System.debug('Your Message');
System.debug(yourVariable);
System.debug('Your Label: ' + yourVariable);
Usar Log Inspector
La práctica función Log Inspector facilita la visualización de registros de gran tamaño. En el caso de Log Inspector, se usan vistas de paneles de registro para presentar distintas perspectivas del código. Para ver el funcionamiento, seleccione Debug (Depurar) | View Log Panels (Ver paneles de registro).
Los paneles de registro cambian la estructura del registro para proporcionar información adicional útil sobre el contexto del código que se ejecuta. Por ejemplo, en los distintos paneles se muestran el origen, las horas de ejecución, el tamaño de la pila y la jerarquía de llamadas. (Por la jerga usada, ya sabemos que esta sección es relativamente técnica. No obstante, recuerde que el objetivo es conocer el funcionamiento de Developer Console y no obtener detalles muy específicos del proceso de depuración. Por lo tanto, si no termina de comprender bien alguna parte, no se preocupe demasiado por ello).
Estos paneles de registro interactúan entre sí para facilitar la depuración de su propio código. Por ejemplo, al hacer clic en una entrada de registro en Execution Log (Registro de ejecución) o Stack Tree (Árbol de pila), los demás paneles: Source (Origen), Source List (Lista de origen), Variables (Variables) y Execution Stack (Pila de ejecución) se actualizan para mostrar información relacionada.
- Stack Tree (Árbol de pila). Muestra entradas del registro en la jerarquía de sus objetos y su ejecución en una vista de árbol descendente. Por ejemplo, si una clase llama a una segunda clase, esta segunda clase se muestra como el elemento secundario de la primera.
- Execution Stack (Pila de ejecución). Se muestra una vista ascendente del elemento seleccionado. Además, se muestra la entrada de registro, seguida de la operación de llamada correspondiente.
- Execution Log (Registro de ejecución). Se muestra cada acción realizada durante la ejecución del código.
- Source (Origen). Se muestra el contenido del archivo de origen, el cual indica la línea de código en ejecución cuando se genera la entrada de registro seleccionada.
- Source List (Lista de origen). Se muestra el contexto del código ejecutado cuando se registra el evento. Por ejemplo, si selecciona la entrada de registro generada al introducir un valor de dirección de correo electrónico incorrecto, en Source List (Lista de origen) se muestra execute_anonymous_apex.
- Variables. Se muestran las variables y sus valores asignados en el ámbito al ejecutar el código que ha generado la entrada de registro seleccionada.
- Execution Overview (Vista general de ejecución). Se muestran estadísticas del código ejecutado, como el tiempo de ejecución y el tamaño de la pila.
¿Qué es Perspective Manager y cómo puede cambiar entre perspectivas?
Una perspectiva es un formato de paneles agrupados. Por ejemplo, la perspectiva predefinida Debug (Depurar) muestra Execution Log (Registro de ejecución), Source (Origen) y Variables (Variables), mientras que la perspectiva Analysis (Análisis) muestra Stack Tree (Árbol de pila), Execution Log (Registro de ejecución), Execution Stack (Pila de ejecución) y Execution Overview (Vista general de ejecución).
Para elegir una perspectiva, seleccione Debug (Depurar) | Switch Perspectives (Cambiar perspectivas) o Debug (Depurar) | Perspective Manager. Es tan fácil como cambiar entre distintos paneles de comunicación y mucho más fácil que intentar descifrar los registros de su especialista en misiones, la estación espacial en tierra y el control de misiones en Marte, y además todo ello en la misma vista.
Puede crear también su propia perspectiva. Configure su combinación de paneles preferida y, a continuación, seleccione Debug (Depurar) | Save Perspective As (Guardar perspectiva como). Escriba un nombre para su perspectiva y haga clic en OK (Aceptar).
Manipular datos de registro para disponer de la información necesaria
Sabe que el motor 3 tiene problemas para funcionar perfectamente en ocasiones. El funcionamiento de este motor a plena capacidad es fundamental en el caso de las maniobras para esquivar el asteroide 2014 QO441. Sin embargo, cada vez que intenta realizar una comprobación de los sistemas, obtiene información de un robot pesimista de su nave espacial. Este robot envía reportes confusos en los que se predice una rebelión robótica, el aumento del número de líneas de su registro y una posible pérdida de información valiosa.
Necesita una forma de controlar la cantidad de información registrada. Por suerte, Developer Console permite hacer exactamente esto con la ayuda de las categorías de registro y los niveles de registro.
Categorías de registro
Una categoría de registro es el tipo de información que se registra.
- ApexCode registra los eventos relacionados con el código Apex e incluye información sobre el inicio y la finalización de un método Apex.
- Database incluye registros relacionados con eventos de la base de datos, como las consultas del lenguaje de manipulación de datos (DML), SOSL y SOQL (en esto nos detendremos más adelante).
Niveles de registro y cómo cambiarlos
Al parecer, el motor 3 vuelve a tener problemas. Cuando revisa los registros para determinar la causa de estos problemas, ve una serie de mensajes de advertencia del robot melancólico.
Dado que un solo robot no puede organizar una rebelión, no le preocupan demasiado estas advertencias. Sin embargo, el motor defectuoso es un asunto urgente. ¿Qué ocurriría si pierde de vista los mensajes del motor 3 entre la gran cantidad de datos de registro? ¡Es necesario acudir al rescate con los niveles de registro!
NONE
) hasta la cantidad máxima de datos registrados (nivel = FINEST
).NONE
ERROR
WARN
INFO
DEBUG
FINE
FINER
FINEST
Los niveles de registro son acumulativos. Por ejemplo, si el nivel de registro es INFO
para un evento, también se incluye información de registro en los niveles ERROR
y WARN
. Sin embargo, si el nivel de registro es ERROR
, solo obtiene mensajes de error. En este caso, no se obtienen mensajes de advertencia ni ninguna otra información de registro para esta categoría de registro.
La información que proporciona un nivel de registro también depende del evento de registro. Los distintos eventos de registro inician el proceso de registro en determinados niveles de registro. Por ejemplo, algunos eventos ApexCode inician el registro en INFO
. Si establece ERROR
como el nivel de registro, no obtiene ninguna información de registro para estos eventos.
Para obtener la información que está buscando, modifique los niveles de registro para distintos eventos. Además, desea suprimir el registro cuando el robot guarde mensajes sobre la supuesta rebelión en la base de datos. Por lo tanto, debe establecer el nivel de registro para la categoría de base de datos (DB
) en NONE
o ERROR
.
Para establecer estos niveles, seleccione Debug (Depurar) | Change Log Levels (Cambiar niveles de registro).
En la ficha General Trace Settings for You (Configuración de seguimiento general para usted), haga clic en Add/Change (Agregar/Cambiar) (1). En la ventana Change DebugLevel (Cambiar DebugLevel), seleccione el nivel de registro para cada categoría. Recuerde que debe usar los niveles de registro con criterio. Si su nivel de registro es FINEST
(Máxima precisión) (2), el código puede alcanzar los límites de registro y tardar más tiempo en ejecutarse. No se preocupe si no ve todos los niveles cuando actualice el nivel de registro para una categoría. Solo se muestran los niveles que aumentan el registro para la categoría.
Por suerte, una vez que desactive el registro para las advertencias del robot, le será más fácil identificar el problema del motor 3. El nivel de refrigerante es bajo. Por lo tanto, envía a un técnico para que reponga el refrigerante que falta. Una vez manos a la obra, pide al técnico que lubrique las articulaciones del robot. Ahora espera que con el lubricante recién aplicado el robot se sienta un poco más optimista.