Logging
Chat, join/leave and audit logs, each through its own webhook.
Three logs, all in logging.yml, all posted through webhooks rather than the bot: chat, join/leave,
and audit.
Each section takes its own webhook-url, so each can go to a different channel with different
permissions, which is the point of separating them.
Chat logging
chat-logging:
enabled: true
webhook-url: "YOUR_WEBHOOK_URL_HERE"
format: "**[%server_name%]** %player%: %message%"
use-embed: false
Placeholders: %player%, %player_displayname%, %message%, %server_name%, %world%,
%timestamp%.
use-embed: true switches to an embed with the player's head as the author icon. Plain text is
denser and easier to search; embeds read better. For a log you actually scroll through looking for
something, plain text wins.
Filtering
filter:
ignore-prefixes: ["/", "!", "#"]
min-length: 1
max-length: 500
ignored-permission: ""
ignore-prefixes keeps commands out of the chat log, including any typed as /msg, which is why
/ is there by default. Setting ignored-permission to something like
uxmdiscordsync.chatlog.ignore exempts staff from being logged.
max-length: 500 truncates rather than dropping.
Rate limiting
rate-limit:
enabled: true
max-messages-per-minute: 30
Thirty is Discord's own webhook allowance. Raising it does not raise Discord's limit: it only means messages get dropped by Discord instead of by the plugin.
Join and leave
Two independent sections: join-leave-logging.minecraft for the game server, and
join-leave-logging.discord for guild membership. Each has its own webhook and its own join and
leave messages, in plain text or embed form.
Minecraft placeholders: %player%, %player_displayname%, %player_uuid%, %server_name%,
%online_players%, %max_players%.
Discord placeholders: %user%, %user_tag%, %user_id%, %user_avatar_url%, %member_count%.
Discord member logging requires the Server Members intent.
Audit logging
audit:
enabled: true
account-link:
enabled: true
webhook-url: "..."
account-unlink:
enabled: true
boost-claim:
enabled: true
rank-sync:
enabled: true
Four event types, each with its own webhook and its own embed. These are the records you go back to when something is disputed: who linked to which Discord account and when, who claimed a boost reward, what roles a sync actually changed.
Point them at a staff-only channel. %player_uuid% and %discord_id% in the default embeds are
what make an entry identifiable months later, and neither belongs in a public channel.
rank-sync fills %minecraft_ranks% and %discord_roles% with what the player had at the time,
which turns "the plugin removed my role" into a question with an answer.
Retention
cleanup:
delete-old-logs-after-days: 30
in advanced.yml. Applies to audit records held in the database; the webhook posts in Discord stay
until you delete them. Set it to 0 to keep everything.
A webhook URL is enough for anyone to post in that channel as the webhook, no bot, no token, no
membership. Keep logging.yml out of public repositories and out of pastes in support channels, and
delete and recreate the webhook if one leaks.
Was this page helpful?