Saltar al contenido principal
Versión: 19

Descripción de los archivos históricos

Las aplicaciones 4D pueden generar varios archivos de historial que son útiles para depurar u optimizar su ejecución. Los historiales suelen iniciarse o detenerse utilizando selectores de los comandos SET DATABASE PARAMETER o WEB SET OPTION y se almacenan en la carpeta Logs folder del proyecto.

La información histórica debe ser analizada para detectar y solucionar los problemas. Esta sección ofrece una descripción completa de los siguientes archivos de registro:

Nota: cuando un archivo de historial puede generarse tanto en 4D Server como en el cliente remoto, se añade la palabra "Server" al nombre del archivo de historial del lado del servidor, por ejemplo "4DRequestsLogServer.txt"

Los archivos de historial comparten algunos campos para que pueda establecer una cronología y hacer conexiones entre las entradas mientras depura:

  • sequence_number: este número es único en todos los registros de depuración y se incrementa para cada nueva entrada cualquiera que sea el archivo de historial, para que pueda conocer la secuencia exacta de las operaciones.
  • connection_uuid: para cada proceso 4D creado en un cliente 4D que se conecte a un servidor, este UUID de conexión se registra tanto del lado del servidor como del cliente. Permite identificar fácilmente el cliente remoto que lanzó cada proceso.

4DRequestsLog.txt

Este archivo de historial registra las solicitudes estándar llevadas a cabo por la máquina 4D Server o la máquina remota 4D que ejecutó el comando (excluyendo las solicitudes web).

Como iniciar este historial:

  • en el servidor:
SET DATABASE PARAMETER(4D Server log recording;1)
//del lado del servidor
  • en un cliente:
SET DATABASE PARAMETER(Client Log Recording;1)
//del lado remoto

Esta instrucción también inicia el archivo de historial 4DRequestsLog_ProcessInfo.txt.

Encabezados

Este archivo comienza con los siguientes encabezados:

  • Log Session Identifier (Identificador de sesión de historial)
  • Nombre del servidor que aloja la aplicación
  • Nombre de usuario: nombre de usuario en el sistema operativo que ejecutó la aplicación 4D en el servidor.

Contenido

Para cada petición, se registran los siguientes campos:

Nombre del campoDescripción
sequence_numberNúmero de operación único y secuencial en la sesión de historial
timeFecha y hora utilizando el formato ISO 8601: 'YYYY-MM-DDTHH:MM:SS.mmm'
systemidID del sistema
componentFirma del componente (por ejemplo, "4SQLS" o "dbmg")
process_info_corresponde al campo "index" en el archivo de historial 4DRequestsLog_ProcessInfo.txt, y permite vincular una petición a un proceso.
requestID de petición en modo remoto cadena de mensajes para las peticiones SQL o mensajes LOG EVENT
bytes_inNúmero de bytes recibidos
bytes_outNúmero de bytes enviados
server_duration | exec_durationDepende de dónde se genere el registro:
  • server_duration cuando se genera en el cliente --Tiempo que tarda el servidor en procesar la petición y devolver una respuesta en microsegundos. B a F en la imagen de abajo, O
  • exec_duration cuando se genera en el servidor --Tiempo en microsegundos que tarda el servidor en procesar la petición. B a E en la imagen de abajo.
  • write_durationTiempo de envío en microsegundos:
  • La petición (cuando se ejecuta en el cliente). A a B en la imagen de abajo.
  • Respuesta (cuando se ejecuta en el servidor). E a F en la imagen de abajo.
  • task_kindApropiativo o cooperativo (respectivamente "p" o "c")
    rttTiempo estimado en microsegundos para que el cliente envíe la solicitud y el servidor la acuse de recibo. De la A a la D y de la E a la H en la imagen de abajo.
  • Sólo se mide cuando se utiliza la capa de red ServerNet, devuelve 0 cuando se utiliza con la capa de red heredada.
  • Para las versiones de Windows anteriores a Windows 10 o Windows Server 2016, la llamada devolverá 0.
  • Flujo de solicitudes:

    4DRequestsLog_ProcessInfo.txt

    Este archivo de historial registra la información de cada proceso creado en la máquina 4D Server o en la máquina remota 4D que ejecutó el comando (excluyendo las solicitudes web).

    Como iniciar este historial:

    • en el servidor:
    SET DATABASE PARAMETER(4D Server log recording;1) //lado servidor
    • en un cliente:
    SET DATABASE PARAMETER(Client Log Recording;1) //del lado remoto

    Esta instrucción también inicia el archivo de historial 4DRequestsLog.txt.

    Encabezados

    Este archivo comienza con los siguientes encabezados:

    • Log Session Identifier (Identificador de sesión de historial)
    • Nombre del servidor que aloja la aplicación
    • Nombre de usuario: nombre de usuario en el sistema operativo que ejecutó la aplicación 4D en el servidor.

    Contenido

    Para cada proceso, se registran los siguientes campos:

    Nombre del campoDescripción
    sequence_numberNúmero de operación único y secuencial en la sesión de historial
    timeFecha y hora utilizando el formato ISO 8601: 'YYYY-MM-DDTHH:MM:SS.mmm"
    process_info_indexNúmero de proceso único y secuencial
    CDB4DBaseContextUUID del contexto de base del componente DB4D
    systemidID del sistema
    server_process_idID del proceso en el servidor
    remote_process_idID del proceso en el cliente
    process_nameNombre del proceso
    cIDIdentificador de la conexión 4D
    uIDIdentificador del cliente 4D
    IP ClientDirección IPv4/IPv6
    host_nameNombre de host del cliente
    user_nameNombre de conexión usuario en el cliente
    connection_uuidIdentificador UUID de proceso de conexión
    server_process_unique_idID único del proceso en el servidor

    HTTPDebugLog.txt

    Este archivo de historial registra cada petición HTTP y cada respuesta en modo bruto (raw). Se registran las solicitudes completas, incluidos los encabezados; opcionalmente, también se pueden registrar las partes del cuerpo.

    Como iniciar este historial:

    WEB SET OPTION(Web debug log;wdl enable without body)  
    //otros valores están disponibles

    Los siguientes campos se registran tanto para la solicitud como para la respuesta:

    Nombre del campoDescripción
    SocketIDID del socket utilizado para la comunicación
    PeerIPDirección IPv4 del host (cliente)
    PeerPortPuerto utilizado por host (cliente)
    TimeStampTimestamp en milisegundos (desde el inicio del sistema)
    ConnectionIDConexión UUID (UUID del VTCPSocket utilizado para la comunicación)
    SequenceNumberNúmero de operación único y secuencial en la sesión de historial

    4DDebugLog.txt (estándar)

    Este archivo de historial registra cada evento que se produce a nivel de programación 4D. El modo estándar ofrece una visión básica de los eventos.

    Como iniciar este historial:

    SET DATABASE PARAMETER(Debug Log Recording;2)  
    //estándar, todos los procesos

    SET DATABASE PARAMETER(Current process debug log recording;2)
    //estándar, sólo el proceso actual

    Los siguientes campos se registran para cada evento:

    Columna #Descripción
    1Número de operación único y secuencial en la sesión de historial
    2Fecha y hora en el formato ISO 8601: (YYYY-MM-DDThh:mm:ss.mmm)
    3ID proceso (p=xx) e ID único proceso (puid=xx)
    4Nivel de stack
    5Puede ser Nombre del comando/Nombre del método/Mensaje/Información de inicio y parada de la tarea/Nombre, evento o callback plugin / UUID conexión
    6Tiempo de la operación de conexión en milisegundos

    4DDebugLog.txt (tabular)

    Este archivo de historial registra cada evento que se produce a nivel de programación 4D en un formato compacto y con tabulaciones que incluye información adicional (en comparación con el formato estándar).

    Como iniciar este historial:

    SET DATABASE PARAMETER(Debug Log Recording;2+4)  
    //formato tabular extendido, todos los procesos

    SET DATABASE PARAMETER(Current process debug log recording;2+4)
    //extendido, sólo el proceso actual

    Los siguientes campos se registran para cada evento:

    Columna #Nombre del campoDescripción
    1sequence_numberNúmero de operación único y secuencial en la sesión de historial
    2timeFecha y hora en el formato ISO 8601: (YYYY-MM-DDThh:mm:ss.mmm)
    3ProcessIDID del Proceso
    4unique_processIDID único del proceso
    5stack_levelNivel de stack
    6operation_typeTipo de operación histórico. Este valor puede ser un valor absoluto:
    1. Comando
    2. Método (método de proyecto, método base, etc.)
    3. Mensaje (enviado por el comando LOG EVENT únicamente)
    4. PluginMessage
    5. PluginEvent
    6. PluginCommand
    7. PluginCallback
    8. Tarea
    9. Método miembro (método adjunto a una colección o a un objeto)
    Al cerrar un nivel de profundidad, las columnas operation_type, operation y operation_parameters tienen el mismo valor que el nivel de pila de apertura registrado en la columna stack_opening_sequence_number. Por ejemplo:
    1. 121 15:16:50:777 5 8 1 2 CallMethod Parameters 0
    2. 122 15:16:50:777 5 8 2 1 283 0
    3. 123 15:16:50:777 5 8 2 1 283 0 122 3
    4. 124 15:16:50:777 5 8 1 2 CallMethod Parameters 0 121 61
    La primera y la segunda línea abren el nivel de la pila, la tercera y la cuarta lo cierran. Los valores de las columnas 6, 7 y 8 se repiten en la línea del nivel de pila de cierre. La columna 10 contiene los números de secuencia de apertura del nivel de pila, es decir, 122 para la tercera línea y 121 para la cuarta.
    7operationPuede representar (según el tipo de operación):
  • un ID de comando de lenguaje (cuando tipo=1)
  • un nombre de método (cuando tipo=2)
  • una combinación de pluginIndex;pluginCommand (cuando tipo=4, 5, 6 o 7). Puede contener algo como '3;2'
  • una UUID task connection (cuando tipo = 8)
  • 8operation_parametersParámetros pasados a comandos, métodos o plugins
    9form_eventEvento formulario si lo hay; vacío en otros casos (supongamos que la columna se utiliza cuando se ejecuta el código en un método formulario o en un método objeto)
    10stack_opening_sequence_numberSólo para los niveles de pila de cierre: número de secuencia del nivel de pila de apertura correspondiente
    11stack_level_execution_timeSólo cuando se cierra el nivel de la pila: el tiempo transcurrido en microsegundos de la acción registrada actualmente (ver la décima columna en las líneas 123 y 124 del registro anterior)

    4DDiagnosticLog.txt

    Este archivo de historial registra muchos eventos relacionados con el funcionamiento interno de la aplicación y es legible para las personas. Puede incluir información personalizada en este archivo utilizando el comando LOG EVENT.

    Como iniciar este historial:

     SET DATABASE PARAMETER(Diagnostic log recording;1) //iniciar registro

    Los siguientes campos se registran para cada evento:

    Nombre del campoDescripción
    sequenceNumberNúmero de operación único y secuencial en la sesión de historial
    timestampFecha y hora en el formato ISO 8601: (YYYY-MM-DDThh:mm:ss.mmm)
    loggerIDOpcional
    componentSignatureOpcional - firma del componente interno
    messageLevelInformación, avisos, errores
    messageDescripción de la entrada del historial

    Dependiendo del evento, se pueden incluir otros campos en el registro, como la tarea, socket, etc.

    4DSMTPLog.txt, 4DPOP3Log.txt y 4DIMAPLog.txt

    Estos archivos de registro registran cada intercambio entre la aplicación 4D y el servidor de correo (SMTP, POP3, IMAP) que ha sido iniciado por los siguientes comandos:

    Los archivos de historial pueden producirse en dos versiones:

    • una versión normal:
      • archivos llamados 4DSMTPLog.txt, 4DPOP3Log.txt, o 4DIMAPLog.txt
      • sin adjuntos
      • utiliza un reciclaje automático de archivos circulares cada 10 MB
      • destinado a la depuración habitual

    Para iniciar este historial:

    SET DATABASE PARAMETER(SMTP Log;1) //iniciar log SMTP
    SET DATABASE PARAMETER(POP3 Log;1) //iniciar log POP3
    SET DATABASE PARAMETER(IMAP Log;1) //iniciar log IMAP

    4D Server: clic en el botón Iniciar los historiales de peticiones y de depuración en la página Mantenimiento ode la ventana de administración de 4D Server.

    Esta ruta al historial es devuelta por el comando Get 4D file.

    • una versión extendida:
      • attachment(s) included no automatic recycling
      • nombre personalizado
      • reservado con fines específicos

    Para iniciar este historial:

    $server:=New object
    ...
    //SMTP
    $server.logFile:="MySMTPAuthLog.txt"
    $transporter:=SMTP New transporter($server)

    // POP3
    $server.logFile:="MyPOP3AuthLog.txt"
    $transporter:=POP3 New transporter($server)

    //IMAP
    $server.logFile:="MyIMAPAuthLog.txt"
    $transporter:=IMAP New transporter($server)

    Contenido

    Para cada petición, se registran los siguientes campos:

    Columna #Descripción
    1Número de operación único y secuencial en la sesión de historial
    2Fecha y hora en el formato RFC3339 (yyyy-mm-ddThh:mm:ss.ms)
    3ID Proceso 4D
    4ID único del proceso
    5
    • Información de inicio de sesión SMTP, POP3 o IMAP, incluyendo el nombre del servidor, el número de puerto TCP utilizado para conectarse al servidor SMTP, POP3 o IMAP y el estado de TLS, o
    • datos intercambiados entre el servidor y el cliente, empezando por "S <" (datos recibidos del servidor SMTP,POP3 o IMAP) o "C >" (datos enviados por el cliente SMTP,POP3 o IMAP): lista de modos de autenticación enviada por el servidor y modo de autenticación seleccionado, cualquier error notificado por el servidor SMTP,POP3 o IMAP, información del encabezado del correo enviado (sólo versión estándar) y si el correo se guarda en el servidor, o
    • Información de cierre de sesión SMTP, POP3 o IMAP.

    Peticiones cliente ORDA

    Este diario registra cada petición de ORDA enviada desde una máquina remota. Puede dirigir la información de registro a la memoria o a un archivo en el disco. El nombre y la ubicación de este archivo de registro son de su elección.

    Como iniciar este historial:

    //a ejecutar en una máquina remota
    ds.startRequestLog(File("/PACKAGE/Logs/ordaLog.txt"))
    //también puede enviarse a la memoria

    Si desea utilizar el número de secuencia único en el registro de peticiones de ORDA, debe activarlo:

    //a ejecutar en una máquina remota

    SET DATABASE PARAMETER(Client Log Recording;1)
    //para activar el número de secuencia del historial

    ds.startRequestLog(File("/PACKAGE/Logs/ordaLog.txt"))
    //también puede enviarse a la memoria

    SET DATABASE PARAMETER(Client Log Recording;0)
    //desactiva el número de secuencia

    Los siguientes campos se registran para cada petición:

    Nombre del campoDescripciónEjemplo
    sequenceNumberNúmero de operación único y secuencial en la sesión de historial104
    urlURL de la petición ORDA efectuada por el cliente"rest/Persons(30001)"
    startTimeFecha y hora de inicio en formato ISO 8601"2019-05-28T08:25:12.346Z"
    endTimeFecha y hora final en formato ISO 8601"2019-05-28T08:25:12.371Z"
    durationDuración del procesamiento cliente (ms)25
    responseObjeto respuesta del servidor{"status":200,"body":{"__entityModel":"Persons",[...]