Format timestamps
After parsing timestamps to datetime, you usually need to convert them back to a string before forwarding the logs to their destination. In most cases, the output configuration does the conversion automatically.
Use the default timestamp format
Data conversion modules like xm_json and xm_syslog have built-in date and time formatting. When you use these modules' functions and procedures, they automatically generate timestamps in the module’s default format.
Consider a log record with an $EventTime
datetime field and a $Message
field.
The table below shows the $EventTime
value stored internally as microseconds since the Unix epoch.
Field | Value |
---|---|
$EventTime |
1708630736221331 |
$Message |
EXT4-fs (dm-0): mounted filesystem with ordered data mode. |
This configuration uses the to_json() procedure of the xm_json module to output log records in JSON format.
<Extension json>
Module xm_json
</Extension>
<Output file>
Module om_file
File '/path/to/output/file'
Exec to_json();
</Output>
Since the configuration does not specify a format for datetime values, it will output the $EventTime
field in the default DateFormat, i.e., YYYY-MM-DDThh:mm:ss.sTZ
in local time.
{
"EventTime": "2024-02-22T20:38:56.221331+01:00",
"Message": "EXT4-fs (dm-0): mounted filesystem with ordered data mode."
}
Use a custom timestamp format
You can use the strftime() function to explicitly convert a datetime value to a string in one of the supported custom date and time formats.
Consider a log record with an $EventTime
datetime field and a $Message
field.
The table below shows the $EventTime
value stored internally as microseconds since the Unix epoch.
Field | Value |
---|---|
$EventTime |
1708636179075845 |
$Message |
EXT4-fs (dm-0): mounted filesystem with ordered data mode. |
This configuration uses the strftime() function to convert $EventTime
to a string in the local time zone.
It then converts the record to JSON for demonstration purposes.
<Extension json>
Module xm_json
</Extension>
<Output file>
Module om_file
File '/path/to/output/file'
<Exec>
$EventTime = strftime($EventTime, '%Y-%m-%dT%H:%M:%S%z'); (1)
to_json();
</Exec>
</Output>
1 | %Y-%m-%dT%H:%M:%S%z is one of the formats that the C strftime(3) function supports. |
The following JSON object shows the same log record after NXLog Agent processed it.
{
"EventTime": "2024-02-22T22:09:39+0100",
"Message": "EXT4-fs (dm-0): mounted filesystem with ordered data mode."
}
NXLog Agent supports additional format strings to the stock C strftime(3) function—for example, date and time formats with fractional seconds and in UTC. See the strftime() documentation in the NXLog Agent Reference Manual for the supported formats.
Consider a log record with an $EventTime
datetime field and a $Message
field.
The table below shows the $EventTime
value stored internally as microseconds since the Unix epoch.
Field | Value |
---|---|
$EventTime |
1708637563256720 |
$Message |
EXT4-fs (dm-0): mounted filesystem with ordered data mode. |
This configuration uses the strftime() function to convert $EventTime
to a string in UTC, regardless of the host’s timezone.
It then converts the logs to JSON for demonstration purposes.
<Extension json>
Module xm_json
</Extension>
<Output file>
Module om_file
File '/path/to/output/file'
<Exec>
$EventTime = strftime($EventTime, 'YYYY-MM-DDThh:mm:ss.sUTC'); (1)
to_json();
</Exec>
</Output>
1 | YYYY-MM-DDThh:mm:ss.sUTC is an NXLog Agent-specific format that supports fractional seconds. |
The following JSON object shows the same log record after NXLog Agent processed it.
{
"EventTime": "2024-02-22T21:32:43.256720Z",
"Message": "EXT4-fs (dm-0): mounted filesystem with ordered data mode."
}