4D applications can generate several log files that are useful for debugging or optimizing their execution. Logs are usually started or stopped using selectors of the SET DATABASE PARAMETER or WEB SET OPTION commands and are stored in the Logs folder of the database (see the Description of 4D files section).
Information logged needs to be analyzed to detect and fix issues. This appendix provides a comprehensive description of the following log files:
- 4DRequestsLog.txt
- 4DRequestsLog_ProcessInfo.txt
- HTTPDebugLog.txt
- 4DDebugLog.txt
These log files share some fields so that you can establish a chronology and make connections between entries while debugging:
- sequence_number: this number is unique over all debug logs and is incremented for each new entry whatever the log file, so that you can know the exact sequence of the operations.
- connection_uuid: for any 4D process created on a 4D client that connects to a server, this connection UUID is logged on both server and client side. It allows you to easily identify the remote client that launched each process.
This log file records standard requests carried out by the 4D Server machine or the 4D remote machine that executed the command (excluding Web requests).
How to start this log:
Note: This statement also starts the 4DRequestsLog_ProcessInfo.txt log file (see below).
Headers
This file starts with the following headers:
- Log Session Identifier
- Hostname of the server that hosts the application
- User Login Name: login on the OS of the user that ran the 4D application on the server.
Contents
For each request, the following fields are logged:
Field name | Description |
sequence_number | Unique and sequential operation number in the logging session |
time | Date and time using 'MM/DD/YY, HH:MM:SS' format |
task_id | Internal task ID |
component | Component signature (e.g., '4SQLS' or 'dbmg') |
process_info_index | Corresponds to the "index" field in 4DRequestsLog_ProcessInfo.txt log, and permits linking a request to a process. |
request | Request ID in C/S or message string for SQL requests or LOG EVENT messages |
bytes_in | Number of bytes received |
bytes_out | Number of bytes sent |
duration | Time taken in milliseconds to perform action |
task_kind | Preemptive or cooperative (respectively 'p' or 'c') |
connection_uuid | UUID identifier of 4D Client, SQL or HTTP Connection (in connection with the same number in 4DRequestsLog_ProcessInfo.txt) |
This log file records information on each process created on the 4D Server machine or the 4D remote machine that executed the command (excluding Web requests).
How to start this log:
Note: This statement also starts the 4DRequestsLog.txt log file (see above).
Headers
This file starts with the following headers:
- Log Session Identifier
- Hostname of the server that hosts the application
- User Login Name: login on the OS of the user that ran the 4D application on the server.
Contents
For each process, the following fields are logged:
Field name | Description |
sequence_number | Unique and sequential operation number in the logging session |
time | Date and time using "MM/DD/YY, HH:MM:SS" format |
index | Unique and sequential process number |
CDB4DBaseContext | DB4D component database context UUID |
VTaskID | Internal task ID |
server_process_id | Process ID on Server |
remote_process_id | Process ID on Client |
process_name | Process name |
cID | Identifier of 4D Connection |
uID | Identifier of 4D Client |
IP | Client IPv4 address |
host_name | Client hostname |
user_name | User Login Name on client |
connection_uuid | UUID identifier process connection (in connection with the same number in 4DRequestsLog.txt) |
This log file records each HTTP request and each response in raw mode. Whole requests, including headers, are logged; optionally, body parts can be logged as well.
How to start this log:
The following fields are logged for both Request and Response:
Field name | Description |
SocketID | ID of socket used for communication |
PeerIP | IPv4 address of host (client) |
PeerPort | Port used by host (client) |
TimeStamp | Timestamp in milliseconds (since system startup) |
ConnectionID | Connection UUID (UUID of VTCPSocket used for communication) |
SequenceNumber | Unique and sequential operation number in the logging session |
This log file records each event occurring at the 4D programming level. Standard mode provides a basic view of events.
How to start this log:
The following fields are logged for each event:
Column # | Description |
1 | Unique and sequential operation number in the logging session |
2 | Elapsed time in milliseconds since log startup |
3 | Process ID (p=xx) and unique process ID (puid=xx) |
4 | Stack level |
5 | Can be Command Name/ Method Name/Message/ Task Start Stop info/Plugin Name, event or Callback/Connection UUID |
6 | Time taken for logging operation in milliseconds (different from 2nd column) |
This log file records each event occurring at the 4D programming level in a tabbed, compact format that includes additional information (compared to the standard format).
How to start this log:
The following fields are logged for each event:
Column # | Description |
1 | Unique and sequential operation number in the logging session |
2 | Elapsed time since log startup in "hh:mm:ss:ms" format (can be preceded by a day counter. For example, if the log was started 3 days ago, the time could be "3+11:58:23:163") |
3 | Process ID |
4 | Unique process ID |
5 | Stack level |
6 | May represent (depending on type entry logged in the 8th column): a Language Command ID (when type=1) | a Method Name (when type=2) | a combination of pluginIndex;pluginCommand (when type=4, 5, 6 or 7). May contain something like '3;2' | a Task Connection UUID (when type=8) | or may contain 'starting sequence number' when closing a stack level (this should correspond to the sequence number of the current action's start) |
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 | Here in the last line (124), the 6th column's value '121' corresponds to the sequence number of the first line (stack level 0). In the line above (123), the 6th column's value '122' corresponds to the sequence number of the upper line (stack level 1) etc. |
7 | Parameters passed to commands, methods, or plugins |
8 | Log operation type. This value may be an absolute value: 1: Command | 2: Method | 3: Message (sent by LOG EVENT command only) | 4: PluginMessage | 5: PluginEvent | 6: PluginCommand | 7: PluginCallback | 8: Task | When a value is negative, it only means that it is the closing stack level counterpart (see 8th columns in lines 123 and 124 in the log above). |
9 | Form event if any; empty in other cases (suppose that column is used when code is executed in a form method or script) |
10 | Elapsed time in micro seconds of the current logged action; only for the closing stack levels (see 10th columns in lines 123 and 124 in the log above) |