Les applications 4D peuvent générer divers fichiers d'historique (logs) utiles pour le débogage ou l'optimisation de l'exécution des bases. Les fichiers d'historique sont généralement démarrés ou stoppés à l'aide des sélecteurs des commandes SET DATABASE PARAMETER ou WEB SET OPTION et sont stockés dans le dossier Logs de la base (cf.section Description des fichiers de 4D).
Il est nécessaire d'analyser les informations enregistrées afin de pouvoir détecter et corriger les problèmes. Cette annexe fournit une description complète des fichiers suivants :
- 4DRequestsLog.txt
- 4DRequestsLog_ProcessInfo.txt
- HTTPDebugLog.txt
- 4DDebugLog.txt
Certains champs de ces fichiers sont communs afin de vous permettre de reconstituer la chronologie des événements et d'établir des connexions entre les entrées lors du débogage :
- sequence_number : ce numéro est unique parmi tous les fichiers d'historique de débogage et est incrémenté à chaque nouvelle entrée, quel que soit le fichier d'historique, de manière à ce que vous puissiez connaître la séquence exacte des opérations.
- connection_uuid : pour chaque process 4D créé sur un client 4D qui se connecte au serveur, cet UUID de connexion est stocké à la fois côté serveur et client. Il vous permet d'identifier facilement le client distant qui a lancé le process.
Ce fichier d'historique enregistre les requêtes standard effectuées par la machine 4D Server ou la machine 4D distante qui a exécuté la commande (à l'exclusion des requêtes Web).
Comment démarrer ce fichier d'historique :
- sur le serveur :
- sur un client :
Note : Cette instruction génère aussi le fichier d'historique 4DRequestsLog_ProcessInfo.txt (voir ci-dessous).
En-têtes
Ce fichier commence par les en-têtes suivants :
- Log Session Identifier (Identifiant de session d'historique)
- Nom du serveur qui héberge l'application
- User Login Name : Nom de l'utilisateur (défini dans l'OS) qui exécute l'application 4D sur le serveur.
Contenu du fichier
Pour chaque requête, les champs suivants sont enregistrés :
Nom du champ | Description |
sequence_number | Numéro d'opération séquentiel et unique dans la session d'historique |
time | Date et heure au format 'MM/DD/YY, HH:MM:SS' |
task_id | ID de tâche interne |
component | Signature du composant (par exemple '4SQLS' ou 'dbmg') |
process_info_index | Correspond au champ "index" dans le fichier d'historique 4DRequestsLog_ProcessInfo.txt, permettant de relier une requête à un process |
request | ID de requête en mode distant chaîne de message pour les requêtes SQL ou messages LOG EVENT |
bytes_in | Nombre d'octets reçus |
bytes_out | Nombre d'octets envoyés |
duration | Temps nécessaire en millisecondes pour effectuer l'action |
task_kind | Type de tâche : process préemptif ou coopératif (respectivement 'p' ou 'c') |
connection_uuid | Identifiant UUID de connexion client 4D, SQL ou HTTP (en relation avec le même numéro dans 4DRequestsLog_ProcessInfo.txt) |
Ce fichier d'historique enregistre des informations sur chaque process créé sur la machine de 4D Server ou la machine 4D distante qui a exécuté la commande (à l'exclusion des requêtes Web).
Comment démarrer ce fichier d'historique :
- sur le serveur :
- sur un client :
Note : Cette instruction génère aussi le fichier d'historique 4DRequestsLog.txt (voir ci-dessous).
En-têtes
Ce fichier commence par les en-têtes suivants :
- Log Session Identifier (Identifiant de session d'historique)
- Nom du serveur qui héberge l'application
- User Login Name : Nom de l'utilisateur (défini dans l'OS) qui exécute l'application 4D sur le serveur.
Contenu du fichier
Pour chaque requête, les champs suivants sont enregistrés :
Nom du champ | Description |
sequence_number | Numéro d'opération séquentiel et unique dans la session d'historique |
time | Date et heure au format 'MM/DD/YY, HH:MM:SS' |
index | Numéro de process séquentiel et unique |
CDB4DBaseContext | UUID du contexte de base du composant DB4D |
VTaskID | ID de tâche interne |
server_process_id | ID du process sur le serveur |
remote_process_id | ID du process sur le client |
process_name | Nom du process |
cID | Identifiant de la connexion 4D |
uID | Identifiant du client 4D |
IP | Addresse IPV4 du client IPv4 |
host_name | Nom d'hôte du client |
user_name | Nom de connexion utilisateur sur le client |
connection_uuid | Identifiant UUID de connexion client 4D, SQL ou HTTP (en relation avec le même numéro dans 4DRequestsLog.txt) |
Ce fichier d'historique enregistre chaque requête HTTP et chaque réponse en mode brut (raw). La totalité des requêtes, en-têtes compris, est enregistrée ; optionnellement, le corps (body) des requêtes peut également être enregistré.
Comment démarrer ce fichier d'historique :
Les champs suivants sont enregistrés pour les requêtes et les réponses :
Nom du champ | Description |
SocketID | ID de la socket utilisée pour la communication |
PeerIP | Adresse IPv4 de l'hôte (client) |
PeerPort | Port utilisé par l'hôte (client) |
TimeStamp | Horodatage en millisecondes (depuis le démarrage du système) |
ConnectionID | UUID de la connexion (UUID de la VTCPSocket utilisée pour la communication) |
SequenceNumber | Numéro d'opération séquentiel et unique dans la session d'historique |
Ce fichier d'historique enregistre chaque événement généré au niveau du langage de 4D. Le mode standard propose une vue basique des événements.
Comment démarrer ce fichier d'historique :
Les champs suivants sont enregistrés pour chaque événement :
Colonne | Description |
1 | Numéro d'opération séquentiel et unique dans la session d'historique |
2 | Temps écoulé en millisecondes à compter du démarrage du fichier d'historique |
3 | ID process (p=xx) et ID unique process (puid=xx) |
4 | Niveau de stack |
5 | Peut être Nom de commande / Nom de méthode / Message / Info Start Stop task / Nom, événement ou callback plugin / UUID connexion |
6 | Temps d'enregistrement de l'opération dans l'historique (différent 2e colonne) |
Ce fichier d'historique enregistre chaque événement généré au niveau du langage de 4D. Le mode tabulaire est plus compact et contient davantage d'informations que le mode standard.
Comment démarrer ce fichier d'historique :
Les champs suivants sont enregistrés pour chaque événement :
Colonne | Description |
1 | Numéro d'opération séquentiel et unique dans la session d'historique |
2 | Temps écoulé à compter du démarrage du fichier d'historique au format "hh:mm:ss:ms" (peut être précédé par un compteur de jours. Par exemple, si l'historique a été démarré il y a 3 jours, le temps pourrait être "3+11:58:23:163") |
3 | ID du process |
4 | ID unique du process |
5 | Niveau de stack |
6 | Peut représenter (en fonction du type d'entrée enregistré dans la 8e colonne : un ID de commande du langage (lorsque le type=1) | un nom de méthode (lorsque le type=2) | une combinaison de pluginIndex;pluginCommand (lorsque le type=4, 5, 6 ou 7). Peut contenir une valeur telle que '3;2' | un UUID de process de connexion (lorsque le type=8) | ou 'starting sequence number' lors de la fermeture d'un niveau de stack (doit correspondre au numéro de séquence du démarrage de l'action courante) |
121 15:16:50:777 5 8 0 CallMethod 2 0 | 122 15:16:50:777 5 8 1 283 1 0 | 123 15:16:50:777 5 8 1 122 -1 0 3 | 124 15:16:50:777 5 8 0 121 -2 0 61 | Ici dans la dernière ligne (124), la valeur de la 6e colonne '121' correspond au numéro de séquence de la première ligne (stack niveau 0). Dans la ligne du dessus (123), la valeur de la 6e colonne '122' correspond au numéro de séquence de la ligne du dessus (stack niveau 1) etc. |
7 | Paramètres passés aux commandes, méthodes ou plug-ins |
8 | Type d'opération d'historique. Il peut s'agir d'une valeur absolue: 1: Commande | 2: Méthode | 3: Message (envoyé par LOG EVENT uniquement) | 4: PluginMessage | 5: PluginEvent | 6: PluginCommand | 7: PluginCallback | 8: Process (Task) | Lorsqu'une valeur est négative, cela signifie simplement qu'il s'agit de la contrepartie de la fermeture d'un niveau de stack (cf. 8e colonne des lignes 123 et 124 dans l'historique ci-dessus). |
9 | Evénement formulaire, le cas échéant ; vide dans les autres cas (par conséquent cette colonne est utilisée lorsque le code est exécuté dans une méthode formulaire ou objet) |
10 | Durée en micro secondes de l'action enregistrée ; uniquement pour les niveaux de femeture de stack (cf. 10e colonne des lignes 123 et 124 dans l'historique ci-dessus) |