Message Logging
Records channel chat messages in NDJSON (Newline Delimited JSON) format to files. This feature is available when channel chat is enabled and is turned on by default.
Configuration
yaml
# config.yml
features:
channelChat:
enabled: true
messageLogging:
enabled: true
retentionDays: 30
maxFileSizeMB: 100| Setting Key | Default | Description |
|---|---|---|
enabled | true | Enable message logging |
retentionDays | 30 | Number of days to retain log files (0 for unlimited retention) |
maxFileSizeMB | 100 | Maximum size of a single log file (MB) |
Log File Format
Log files are saved in the plugins/LunaticChat/logs/ directory. Each line is a single JSON object.
File Naming
channel-messages-YYYY-MM-dd.jsonWhen the file size exceeds maxFileSizeMB, a new file with a suffix is created.
channel-messages-2026-04-05.json # Base file
channel-messages-2026-04-05-1.json # On size overflow
channel-messages-2026-04-05-2.json # On further overflowEntry Format
Each line has the following JSON structure.
json
{
"timestamp": "2026-04-05T14:23:45.123Z",
"playerId": "550e8400-e29b-41d4-a716-446655440000",
"playerName": "Steve",
"channelId": "general",
"message": "Hello everyone!"
}| Field | Type | Description |
|---|---|---|
timestamp | String | ISO 8601 timestamp (UTC) |
playerId | String | Player UUID |
playerName | String | Player display name |
channelId | String | ID of the channel the message was sent to |
message | String | Message content |
File Rotation
- Daily rotation: A new file is created when the date changes
- Size rotation: Switches to a suffixed file when
maxFileSizeMBis exceeded - Automatic cleanup: Log files older than the number of days specified by
retentionDaysare automatically deleted (no deletion when set to0)
Usage Examples
Since the format is NDJSON, you can easily filter and aggregate logs using tools like jq.
Extract Messages from a Specific Channel
bash
jq 'select(.channelId == "general")' channel-messages-2026-04-05.jsonExtract Messages from a Specific Player
bash
jq 'select(.playerName == "Steve")' channel-messages-2026-04-05.jsonCount Messages by Channel
bash
jq -s 'group_by(.channelId) | map({channel: .[0].channelId, count: length})' channel-messages-2026-04-05.json