Skip to content

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 KeyDefaultDescription
enabledtrueEnable message logging
retentionDays30Number of days to retain log files (0 for unlimited retention)
maxFileSizeMB100Maximum 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.json

When 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 overflow

Entry 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!"
}
FieldTypeDescription
timestampStringISO 8601 timestamp (UTC)
playerIdStringPlayer UUID
playerNameStringPlayer display name
channelIdStringID of the channel the message was sent to
messageStringMessage content

File Rotation

  • Daily rotation: A new file is created when the date changes
  • Size rotation: Switches to a suffixed file when maxFileSizeMB is exceeded
  • Automatic cleanup: Log files older than the number of days specified by retentionDays are automatically deleted (no deletion when set to 0)

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.json

Extract Messages from a Specific Player

bash
jq 'select(.playerName == "Steve")' channel-messages-2026-04-05.json

Count Messages by Channel

bash
jq -s 'group_by(.channelId) | map({channel: .[0].channelId, count: length})' channel-messages-2026-04-05.json