Logging
One central page to send every module's logs to Discord — delivered as webhooks styled with your server's Branding. Moderation, security, community and server-event logs all live here, and every action Discord records in your server's audit log is covered — with the person who did it, the reason they gave, and exactly what changed.
On this page
One Home for Every Log#
Configure all logging from Dashboard → Logging. There is no more pasting webhook URLs or hunting for log settings on separate feature pages — pick a channel and the bot creates and manages the webhook for you.
Master switch#
One toggle turns all logging on or off. When it's off, nothing is logged anywhere.
Per-event routing#
Send each event to its own channel, or leave it on the default channel. Toggle any event individually.
Branded webhooks#
Every log carries your server's name, logo, accent colour and footer from the Branding page.
Quick Setup#
One click creates a private logging category, makes the channels and wires up every webhook.
Who & why#
Logs are merged with your server's audit log, so each one names the person responsible and the reason they gave.
Full coverage#
86 event types across 12 categories — everything Discord writes to the audit log and the events it records nowhere, including action types added in future.
How It Works#
A few layers decide where a log lands: the master switch, the default channel, a dedicated moderation channel, and per-event routing.
-
1
Turn on the master switch
Open Dashboard → Logging and enable logging. This is the kill-switch for everything below it.
-
2
Pick a default channel
Choose where logs go when an event has no channel of its own. The bot finds or creates a managed
Server Logswebhook in that channel automatically. -
3
Set a moderation channel (optional)
Choose a separate channel for moderation logs — mod actions (warn/kick/ban/unban/timeout/other), automod & anti-spam, and every security event — so they stay out of your normal server log. Any moderation event without its own channel goes here; leave it empty to send moderation logs to the default channel.
-
4
Route individual events (optional)
Expand any group and give a specific event its own channel — for example send
Banto#bansandAutomodto#automod. Anything left on its default falls back to the moderation channel (for moderation events) or the default channel (for everything else).
Who Did It, and Why#
A log that says "a channel was deleted" is only half the story. Azra reads your server's audit log and merges it with what it saw happen, so one log entry tells you the whole thing.
Every log carries as much as Discord will give us:
Performed by#
The member or bot responsible, as a mention plus their ID.
Reason#
The reason typed into Discord's "reason" box, or given to an Azra command. When a person is named but typed nothing it reads No reason provided; when the action was not performed through Azra and nobody could be named, it reads No data found, as this action was not performed through AZRA Bot.
Before → after#
Exactly what changed. Permission changes show only what was added and removed, not two long lists.
Audit entry ID#
The action type and entry ID, so you can cross-check the log against Discord's own audit log.
One action, one log#
Discord tells the bot about most actions twice — once as it happens, and again as an audit-log entry a moment later. Azra waits briefly, merges the two, and posts a single entry. You will not see a "channel deleted" log followed by a "someone deleted a channel" log.
The same goes for Azra's own actions: when a moderator runs /ban, that ban is logged once by the command — not a second time from the audit log. Bans placed by other bots or by hand in the Discord client are logged normally.
Each event is read from whichever source Discord actually records#
Discord's audit log does not cover everything that happens in a server, so Azra does not pretend it does. Every event is taken from the source that genuinely holds it:
- Audit log — for the actions Discord officially records there: bans, kicks, timeouts, channel/role/server edits, permission overwrites, webhooks, invites, integrations, emoji, stickers, pins and bulk deletes. This is what supplies who did it and any reason they gave.
- Direct detection — for the things Discord records nowhere: members joining and leaving, message edits, a member deleting their own message, and every voice event including server mute and deafen. Azra watches these as they happen rather than looking for an audit entry that will never exist.
The practical effect is that no event is missing because it was looked for in the wrong place, and no log invents a moderator it cannot actually name. Where Discord records no one, the log says so.
It also means logging keeps working when Azra cannot read your audit log at all: the half it saw directly is still posted, marked audit log unavailable, instead of the event vanishing along with the permission.
Built for what Discord adds next#
If Discord introduces a brand-new audit-log action, Azra still logs it under Unrecognised audit-log actions with the raw entry attached, rather than silently ignoring it until the bot is updated. Nothing that happens in your server goes unrecorded.
Event Catalogue#
Every event you can log, in the same 12 categories they appear in on the dashboard. Events marked off by default only log once you switch them on. The first four categories are moderation scope — they use the moderation channel when one is set. The dashboard is the authority on the exact list: it only ever offers events your server can actually produce, so a category whose module is switched off simply is not shown.
Moderation#
| Event | Logged when… |
|---|---|
| Warn | /warn is used. |
| Kick | /kick, the Quick Kick context menu, a temp-kick's re-removal, an Auto-Moderation kick, or someone kicks a member from the Discord client. This is the moderation copy (the case log); the member timeline gets its own kick card, stacked above the departure it causes — see the ban pair note under Members. |
| Ban | /ban, /tempban, Quick Ban, an anti-nuke ban, or a ban placed by hand or by another bot. This is the moderation copy — it names the moderator, the reason and the case number. The member timeline gets its own ban card stacked with the exit it causes: see the ban pair note under Members. |
| Unban | /unban, a tempban auto-expiring, or an unban from the Discord client. This is the moderation copy (the case log); the member timeline gets its own unban card — see the ban pair note under Members. |
| Timeout / Timeout Removed | A member is timed out or has their timeout cleared — one sentence, with the member's own name and avatar as the author line: @MidnightPing has been timed out for 1 minute, or @member has had their timeout removed. The length is read off the timeout itself and printed in words, never as a date string or a countdown that goes stale the moment the embed is posted; the raw ID is muted in the footer beside the time, and the orange accent keeps the punitive read. No title and no field grid: Timed Out Until, Performed By, Reason and Detected By are all gone. This is the moderation copy, and a timeout produces a second one for the member log — see Member Timed Out under Members. |
| Purge | /purge or !purge runs, logged as a narrative card rather than a grid: the moderator's avatar and name as the author, Used purge command in #channel, the command exactly as it was typed (/purge amount: 500 user: @member), how many messages went, and the time. One purge is one log — the matching Messages Bulk Deleted server event stands down instead of repeating it. |
| Other actions | Lock, unlock, slowmode, lockdown and temp-role changes. |
| Member Prune | An inactivity prune runs — including how many members it removed and the inactivity window. |
Voice#
| Event | Logged when… | Default |
|---|---|---|
| Member Joined Voice | A member connects to a voice or stage channel. Logged as a single line — the member's own name and avatar head the log — then @member joined voice channel #channel with both as live mentions and the raw member ID muted beside the time (ID: 507962222132068362). No title, no property grid and no “when” row: Discord draws the timestamp on the footer line it already has. | Off by default |
| Member Left Voice | A member disconnects from voice on their own. Logged as the exact twin of a join — the member's own name and avatar head the log, then @member left voice channel #channel with both as live mentions and the raw member ID muted beside the time (ID: 507962222132068362). No title, no property grid and no “when” row, and the accent is the red of a departure rather than a join's green. A moderator's forced disconnect is the separate Member Disconnected log below, which still names them. | Off by default |
| Member Switched / Was Moved | A member changes voice channel — either by choice, or dragged by a moderator. Logged as the third single-line notice: @member switched voice channels #old -> #new, with the member's own name and avatar heading it and their raw member ID muted beside the time in the footer. No title, no property grid, no “when” row and no “performed by” or “detected by”: the movement is the whole log, and a move made through Azra keeps the moderator's name in its own moderation log. | On |
| Member Disconnected | A moderator forcibly disconnects a member from voice. | On |
| Voice Mute / Unmute | A member is server-muted or unmuted. | On |
| Voice Deafen / Undeafen | A member is server-deafened or undeafened. | On |
Automod & Spam#
| Event | Logged when… |
|---|---|
| Automod Actions | A message is removed for links, blocked words, caps, mentions, invites or AI moderation. |
| Anti-Spam | A user trips the message-burst rate limit. |
| AutoMod Rule Changed | Someone creates, edits or deletes an AutoMod rule in Server Settings — a different thing from a rule firing. Azra's own Azra • … rules are excluded. |
Auto-Moderation also publishes one event per rule group — keywords, links, images, invites, threads, reactions, usernames and the rest — so you can send link enforcement somewhere different from keyword enforcement. They appear on the dashboard under Automod Events whenever Auto Moderation is switched on, and any you have not configured individually follow whatever their parent event is set to.
Security#
| Event | Logged when… |
|---|---|
| Anti-Nuke | A mass-deletion / mass-ban attack is detected and stopped. |
| Raid Protection | A burst of joins trips the raid threshold or a lockdown starts. |
| Bot Detection | A joining account is flagged by the suspicious-account scorer. |
| Copy-Paste Guard | The same message is spammed across multiple channels. |
| Captcha | Captcha verification events (e.g. a failed role assignment). |
| Verification | The account-age gate kicks a too-new account. |
Members#
| Event | Logged when… | Default |
|---|---|---|
| Member Joined | A member joins — one compact card: the avatar beside Member Joined as the header, the member on one line (@mention and their plain username), their Account Age in words (8 months, 10 days rather than "8 months ago"), and the raw ID muted in the footer with the time. No Detected By line: Discord records no audit entry for a join, and the card no longer spends a paragraph saying so. | On |
| Member Left | A member leaves or is removed — the join card's twin, without the account age and without the picture. No member count and no role list: a departure is a notification that somebody left, and it is the shortest card in the catalogue. A departure a ban caused is posted directly under that ban card, so the two read as one story. | On |
| Member Banned | A member is banned — one compact card, the same footprint as a departure: the avatar beside Member Banned as the header, the member on one line (@mention and their plain username), and the raw ID muted in the footer with the time. It is posted immediately before the exit it causes, so the pair stacks in this channel in the order it happened. The moderator and the reason stay in the moderation log, where a moderation log belongs, and no Detected By line is written. By default this card follows wherever Member Left goes, so the pair stays together; route it somewhere specific and it goes there on its own. | On |
| Member Kicked | A member is kicked — one compact card, the same footprint as the ban card and the same red accent: the avatar beside Member Kicked, the member on one line, the profile picture at full size on the right, the raw ID muted in the footer with the time. It is posted immediately before the departure it causes, so the pair stacks in the order it happened — a kick has no gateway event of its own, so its card arrives with the audit entry a moment after the member has already left, and the departure card is what waits for it. The moderator and the reason stay in the moderation log, and no Detected By line is written. By default this card follows wherever Member Left goes. | On |
| Member Unbanned | A member is unbanned — the ban card's undo, in this channel and in the same shape: the avatar beside Member Unbanned, the member on one line, the profile picture at full size on the right, the raw ID muted in the footer with the time. It wears a blue accent where a ban and a departure wear red, which is the whole of what tells the two apart in a busy channel — nothing came back, so it is not green either. The moderator stays in the moderation log (the detailed case log), and no Detected By line is written. It is posted for every unban, including one Azra performed itself. By default it follows wherever Member Banned goes. | On |
| Member Timed Out | A member is timed out — the second of the two embeds a timeout produces, and the one for this channel: the avatar beside Member Timed Out, the member on one line (@mention and their plain username), then Duration: 10 minutes in words on the next line, the profile picture at full size on the right, and the raw ID muted in the footer with the time. It wears the orange a punitive state wears, and it names no moderator, no reason and no audit entry — the moderation case log carries all three, and the two embeds are independent: switching one off never touches the other. It is dispatched for every timeout, including one Azra placed itself, and one placed from the Discord client. A timeout that is later removed posts nothing here — lifting a punishment is a moderation event. By default this card follows wherever Member Left goes. | On |
| Nickname / Role Changes | A member's nickname or roles change — one sentence per change: @member was given the tester role, or @member was removed from the tester role. A nickname reads as a summary line (@member nickname changed) over a stacked Before / After pair — one name on the line beneath each label, and None for a side that did not exist — rather than an arrow crammed in beside the date. The member is the author line (their plain username and avatar), their raw ID is muted in the footer beside the time, and the role is named by its name rather than its ID. No title and no field grid: Member, When, Roles Now, Performed By, Reason and Detected By are all gone. A nickname and a role edit made together stay one card. | Off by default |
Channels#
Threads, forum posts and stages live here too — a thread is a channel, and a stage instance is the live state of a stage channel, so they all share one destination.
| Event | Logged when… |
|---|---|
| Channel Created | A channel or category is created — one line and a muted footer: Channel Created: #logs (a category says Category Created), with the raw channel ID beside the time (ID: 1556998067302047887). The channel is named by its mention, so the line follows a rename. No title and no field grid: Type, Category, Position, Name, Permission Overwrites, Age Restricted, Slowmode and Flags are all gone — a channel seconds old carries Discord's defaults in every one of those cells, so reading them said nothing — along with Performed By, Reason and Detected By, which belong to the moderation log of anything done through Azra. The card is headed by the server rather than by whoever created the channel, and the green accent stays. The log is still merged with Discord's own record of the creation, so a guild without View Audit Log receives exactly the same card. No Detected By line is written. |
| Channel Updated | A channel's settings change — one card, whatever moved: the title is always Channel Updated, the body is #channel was changed:, and beneath it sit only the settings that actually changed, each as a before → after (Slowmode Off → 30s). The per-change titles (Channel Renamed, Channel Slowmode Changed, Voice Settings Changed…) are gone: they made one afternoon of tidying a channel read as four unrelated events, and the fields already said it. Also gone are the Channel block that repeated the mention, the plain name and the raw ID three ways over, the Performed By/Reason pair (which printed Unknown — audit log unavailable and No data found, as this action was not performed through AZRA Bot. when Discord had no entry, and nobody for a drag, which Discord never records one for) and the Detected By paragraph. A channel named inside a change is its mention (Category: none → #Community), never an 18-digit ID, and the raw channel ID sits muted beside the time at the foot of the card (ID: 1557012312752136242). The card is headed by the server rather than by whoever edited it. Reordering channels is still one log naming every channel that moved, not one per channel. No Detected By line is written. |
| Channel Deleted | A channel or category is deleted — the creation card's twin, one line and a muted footer: Channel Deleted: #secret-plans (a category says Category Deleted), with the raw ID beside the time (ID: 1555199260989847984). The channel is named plainly, not mentioned, because <#id> on a deleted channel renders as #deleted-channel and buries the one thing that says which channel this was. The former-state grid (Type, Category, Position, Name, Permission Overwrites, Flags) and the Performed By/Reason/Detected By blocks are all gone. That state is not lost by their removal: it is kept in full — every overwrite with both bitfields, the topic, the position, the forum tags — by Server Recovery, which is what the 12-hour restore reads, and the log says so in its own description rather than printing a second copy of the row as a grid nobody can use. The card is headed by the server, and the red accent stays. No Detected By line is written. |
| Permission Overwrites Changed | A channel's permissions change for a role or member — added, edited or removed. The same card a settings edit gets (#channel was changed:), on its own routing key so it can go to a channel of its own, with one sentence naming the subject and then one bullet per permission that moved, each naming the state it now carries: Permissions changed for @everyone: • View Channel: Allow • Send Messages: Deny • Mention Everyone: Inherit. The old headings (Overwrite For, Type, Allowed Permissions, Denied Permissions, Details) and their comma-separated blocks are gone, and with them the double-counting: one permission that moved from denied to allowed used to appear twice, once under each block, with opposite signs. Inherit is the state an overwrite's third option leaves a permission in — it falls back to the member's roles. Nobody is named and no Detected By line is written. |
| Thread Created | A thread or forum post is created (forum posts are labelled as such). |
| Thread Updated | A thread is renamed, archived, unarchived, locked, has its tags changed, or its auto-archive/slowmode edited. |
| Thread Deleted | A thread or forum post is deleted. |
| Stage Instance | A stage goes live, has its topic or privacy changed, or ends. |
Roles#
| Event | Logged when… |
|---|---|
| Role Created | A role is created — one line and a muted footer: Role Created: tester, with the raw role ID beside the time (ID: 1557006327577051198). No title and no field grid: Name, Colour, Position, Displayed Separately, Mentionable, Members, Permissions and Issued Via are all gone — a role seconds old carries Discord's defaults in every one of those cells, so reading them said nothing — along with Performed By and Reason, which belong to the moderation log of anything done through Azra. The green accent stays, and the log is still merged with Discord's own record of the creation, so a guild without View Audit Log receives exactly the same card. No Detected By line is written. |
| Role Updated | A role's permissions, colour, icon, name, position, hoist or mentionable setting changes. Permission changes are shown as a diff — only what was granted and revoked. |
| Role Deleted | A role is deleted — the same one-line card as a creation, in red: Role Deleted: Joine, with the raw role ID beside the time (ID: 1552595043657846864). No title and no field grid: Name, Colour, Position, Displayed Separately, Mentionable, Members, Permissions and Colours are all gone — the role no longer exists, so nothing in that list could be acted on or compared — along with Performed By, Reason and Detected By. The role's own state is not lost: the Server Recovery window keeps a restorable copy of it for 12 hours. No Detected By line is written. |
Server Settings#
| Event | Logged when… |
|---|---|
| Server Settings Changed | Any server-level change: name, icon, banner, invite & discovery splash, vanity URL, AFK channel and timeout, system / rules / public-updates / safety-alerts channels, preferred locale, verification level, explicit content filter, default notifications, NSFW level, 2FA requirement and community features. |
| Emoji Changed | An emoji is created, renamed or removed. A creation and a removal are each one line with the emoji's own art drawn beside it. Creation: Emoji Created, then New emoji has been made: `:clown:`. Removal: Emoji Deleted, then The `:chill:` emoji has been deleted! — both with the name in inline code, the emoji as the thumbnail and the raw emoji ID muted beside the time (ID: 1557306698668965988). The property grid (Name, Animated, Restricted To Roles, Image) is gone from both — an emoji seconds old is simply not animated and open to everyone, and the four cells of an asset that no longer exists describe nothing anybody can act on, while a role restriction is logged as its own emoji update the moment it is set — along with Performed By, Reason and Detected By. Both cards are headed by the server rather than by whoever made the change, and the accent stays: a removal says so in red. Renames keep the before → after and their property grid. |
| Sticker Changed | A sticker is added, edited or removed. |
| Soundboard Sound Changed | A soundboard sound is added, edited or removed. |
| Onboarding Changed | The server's onboarding flow or any of its prompts is created, edited or removed. |
| Server Home Changed | Server Home settings are created or updated. |
| Creator Monetization | A monetization request is created or its terms accepted. |
| Slash Command Permissions | Someone changes which roles or members can use a bot's slash commands. |
Integrations#
| Event | Logged when… |
|---|---|
| Webhook Changed | A webhook is created, edited or deleted. Azra's own managed log webhooks are excluded. |
| Invite Changed | An invite is created, edited or deleted — with its channel, creator, max uses and expiry. An invite that simply expires or runs out of uses is logged too, as no-one revoked it. |
| Integration Changed | An integration is added, edited or removed — including a bot being added to the server. |
Community#
| Event | Logged when… |
|---|---|
| Giveaways | Giveaway lifecycle events — created, ended, rerolled, cancelled, winners drawn. |
| Tickets | A support ticket is opened, claimed or closed (uses this central destination unless the department overrides it). |
| Scheduled Event | A server event is created, renamed, moved, rescheduled, started, finished, cancelled or deleted — the log names which of those happened, with the time, the location, the event type and who did it. Starting and finishing happen on Discord's own clock and record no audit entry, so those two say so rather than reporting an unknown moderator. |
| Scheduled Event RSVP Off by default | A member marks themselves interested in an event, or withdraws. Discord records no audit entry for an RSVP — Azra detects it from the event itself. |
Messages#
| Event | Logged when… | Default |
|---|---|---|
| Message Deleted | A non-bot message is deleted, and the log is built around the MESSAGE rather than around the record: From the author and In the channel as mentions on one line, a divider, then the deleted text with its attachments, embeds, links and mentions — with every raw identifier (author id, message id, the time it was sent) gathered into a muted strip at the bottom. A deleted picture is not described but drawn: Azra copies the image while it still exists and re-uploads it into the log itself (how that works), so a message that was only a screenshot logs as that screenshot. Two buttons sit under the log: Get User ID and Jump to Context. If a moderator deleted it, the log names them; if the author deleted their own, that is said plainly. Inside a thread the archived copy is used, so a message Azra no longer had cached is still logged in full. | Off by default |
| Message Edited | A non-bot message changes, and the log reads the same way a deletion does: From the author and In the channel as mentions, a divider, then Before and After — plus any attachment added or removed and the links and embeds it now carries — with the raw ids gathered into a muted strip at the bottom and Get User ID / Jump to Message buttons underneath. An automatic link preview is not an edit and is not logged as one. | Off by default |
| Messages Bulk Deleted | A purge, logged as ONE line: Bulk Delete in #channel, 87 messages deleted, with the time beneath it and a View & Restore Log button below. That button opens a private review of the purged messages, and Restore All puts them back into their channel as their authors — for seven days, after which the copy is deleted automatically and permanently (how that works). Inside a thread the archived copy fills in the messages Discord no longer had, so those are restorable too. A purge run through Azra's own /purge is logged once by the command instead. | On |
| Message Pinned / Unpinned | A message is pinned or unpinned — separately routable, each with a link to the message itself. | Off by default |
Forward Compatibility#
| Event | Logged when… |
|---|---|
| Unrecognised audit-log actions | Discord records an action type Azra doesn't have a dedicated format for yet — logged with the raw entry attached so nothing is missed while support catches up. |
Branded Webhooks#
Logs aren't plain bot messages — they're delivered through managed webhooks so they wear your server's identity.
Every log embed picks up the settings from your Branding page:
- Webhook name & avatar — your brand name and logo.
- Accent colour — the embed's left bar.
- Footer — your footer text and icon.
Set nothing and logs still arrive as Azra, with the bot's own name and profile
picture — not as an anonymous Server Logs webhook with a blank avatar. Branding
overrides that wherever you fill it in, so the two work together: anything you leave empty falls
back to the bot's identity.
Quick Setup#
The "set and forget" button. It creates a private logging category at the bottom of your server, makes the channels, and wires every webhook to match the events you currently have enabled.
When you click Run Quick Setup you choose a layout:
Choosing a layout#
| Layout | What it creates |
|---|---|
| Split mod & normal | Two channels — #mod-logs for moderation events (mod actions, voice moderation, automod & anti-spam, security) and #server-logs for everything else. |
| One channel per group | Separate #mod-logs (moderation, voice moderation, automod), #security-logs, #giveaway-logs, #ticket-logs and #server-logs (members, channels & threads, roles, server settings, integrations, messages). Only channels with an enabled event are created. |
| Detailed logs | A dedicated channel for every category, each receiving only its own events — #moderation-logs, #voice-logs, #automod-logs, #security-logs, #member-logs, #channel-logs (channels, threads and stages), #role-logs, #server-logs, #integration-logs, #community-logs, #message-logs and #other-logs. Only channels with an enabled event are created. |
Re-running Quick Setup#
-
1
Pick the layout and category name
Defaults to a category called
Server Logs. -
2
Choose who can see the logs
The category is hidden from
@everyone; admins always see it. Tick any extra roles (e.g. your staff role) that should have access. -
3
Create
The bot builds the category, channels and webhooks, and overwrites the current routing to point at the new channels.
Requirements#
| Requirement | Why |
|---|---|
| Manage Server (dashboard) | Needed to open and edit the Logging page. |
| Manage Webhooks (bot) | So the bot can create the managed log webhooks in your channels. |
| View Audit Log (bot) | Strongly recommended. Lets each log name the person who performed the action and the reason they gave. Without it everything is still logged, just as Performed by: Unknown. |
| Manage Channels (bot) | Only for Quick Setup, to build the logging category and channels. |
| Active plan | Logs are only delivered while the server has an active Basic or Pro plan. You can still configure everything while a plan is inactive. |