> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bloombot.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Event logging

> Keep a staff record of moderation actions, message edits and deletions, joins and leaves, roles, channels, and more.

Bloom can post a record of what happens in your server to channels you choose. Each category has its own channel, so message edits can go to one place and moderation actions to another.

<Info>
  The commands on this page need the **Administrator** permission.
</Info>

## How it works

All logging is off until you point a category at a channel. From then on, Bloom posts an embed to that channel whenever a matching event happens. Nothing is stored for you to browse later, so treat log channels as the record itself and keep them private.

Bloom needs **View Channel**, **Send Messages**, and **Embed Links** in every channel it logs to. When it cannot post, the event is simply not logged.

<Warning>
  Message logs contain what people wrote, including messages they deleted. Restrict your log channels to staff.
</Warning>

## What each category logs

| Category   | Type      | What lands there                                                                                                                                                            |
| ---------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Moderation | `mod`     | Moderation actions taken with Bloom: warns, kicks, bans, mutes, timeouts, jails, and their reversals, each with a case number, the moderator, the reason, and any duration. |
| Join       | `join`    | A member joined, with their ID, account age, and the new member count.                                                                                                      |
| Leave      | `leave`   | A member left, with their ID, how long they stayed, the roles they held, and the new member count.                                                                          |
| Message    | `message` | Edits with the before and after text, deletions with the content and attachments, and bulk deletions as an attached text file.                                              |
| Voice      | `voice`   | Joining, leaving, and switching voice channels, plus server mute, server deafen, streaming, and camera changes.                                                             |
| Role       | `role`    | Roles created, deleted, and edited, and roles added to or removed from members.                                                                                             |
| Channel    | `channel` | Channels created, deleted, and edited, including topic, NSFW, bitrate, and slowmode changes.                                                                                |
| Thread     | `thread`  | Threads created, deleted, and edited, including archived, locked, and slowmode changes.                                                                                     |
| Invite     | `invite`  | Invites created, with the code, channel, use limit, and expiry, and invites deleted.                                                                                        |
| Emoji      | `emoji`   | Emojis added, removed, and renamed.                                                                                                                                         |
| Sticker    | `sticker` | Stickers added, removed, and edited.                                                                                                                                        |
| Server     | `server`  | Server name, icon, banner, vanity URL, verification level, description, AFK settings, and system channel changes.                                                           |

Type names also accept their plural, and a few have short forms: `mods`, `msg`, `vc`, and `guild`.

<Tip>
  Most entries name who performed the action, which Bloom reads from Discord's audit log. Give Bloom **View Audit Log** or entries show what changed without saying who did it.
</Tip>

Messages from bots and webhooks are left out of message logs.

## Quick start

<Steps>
  <Step title="Make a staff channel">
    Create a channel only your staff can read, and confirm Bloom can view it, send messages, and embed links.
  </Step>

  <Step title="Point a category at it">
    Run `!logs mod #mod-logs`. Bloom replies `Moderation log channel has been set to #mod-logs` and posts a confirmation in that channel, so you can see right away that it can write there.
  </Step>

  <Step title="Add the categories you need">
    Repeat for each category, for example `!logs message #message-logs`. To send everything to one channel, run `!logs all #server-logs`.
  </Step>

  <Step title="Review the setup">
    Run `!logs` with no arguments to list every category that is currently pointed at a channel.
  </Step>
</Steps>

## Setting log channels

<ParamField path="logs [type] [#channel|none]" type="Administrator">
  Sets where each category is logged. Aliases: `setlogs`, `logchannel`, `setlogchannel`.

  * `!logs` shows the valid types and which categories are active.
  * `!logs mod #mod-logs` sends that category to a channel. The channel can be a mention or its exact name.
  * `!logs all #server-logs` points every category at one channel.
  * `!logs message none` turns off one category. `!logs all none` turns off all of them.
  * **Bloom needs:** View Channel, Send Messages, Embed Links in the target channel, plus Attach Files to post bulk deletion files.
</ParamField>

### Join logs, two ways

`logs join` and `logs leave` record joins and leaves as separate entries, in separate channels if you want. `joinlogs` instead keeps one entry per member and rewrites it when they leave, which keeps the arrival and departure of a member together.

<ParamField path="joinlogs <#channel|off>" type="Administrator">
  Posts a single embed when a member joins and edits that same embed when they leave, adding the time they left. Alias: `joinlog`.

  Each entry flags accounts younger than seven days, accounts with no avatar, and accounts Discord has marked as spammers.

  * **You need:** Administrator
  * **Bloom needs:** View Channel, Send Messages, Embed Links in the target channel.
</ParamField>

<Info>
  This is a separate setting from the Join category, so `!logs all none` does not switch it off. Use `!joinlogs off` for that. Configuring both means every join is recorded twice.
</Info>

## Leaving things out

<ParamField path="logignore <add|remove|list> [#channel]" type="Administrator">
  Excludes a channel from **message** logs. Edits and deletions there are never posted. Other categories are unaffected. Aliases: `ignorelogchannel`, `logexclude`.

  * `!logignore add #spam` stops logging messages from that channel.
  * `!logignore remove #spam` starts logging it again. This also accepts a channel ID, so you can clean up entries for channels that no longer exist.
  * `!logignore list` shows everything currently ignored.
</ParamField>

<ParamField path="logs role ignore <role>" type="Administrator">
  Leaves a role out of the **role** log. Run it again on the same role to undo it.

  Ignored roles are skipped when a role is edited or deleted, and when members gain or lose that role. Useful for roles that change constantly, such as level rewards or a color role. Role creation is still logged.
</ParamField>

## Configuring from the dashboard

The **Logging** module on the [dashboard](/getting-started/dashboard) sets the same channels with a picker, and manages the ignored channel and role lists. It needs Administrator, like the commands.

## Troubleshooting

<AccordionGroup>
  <Accordion title="Nothing appears in a log channel">
    Run `!logs` to confirm the category still points where you expect. If the channel was deleted or renamed, set it again. Then check that Bloom can View Channel, Send Messages, and Embed Links there. Setting a category posts a confirmation into the target channel, so if that message never arrives, the permissions are the problem.
  </Accordion>

  <Accordion title="A deleted message was logged without its content">
    Discord does not always hand over the content of older messages when they are deleted. Bloom fills the gap from its own record where it has one, and otherwise logs the deletion with the author and channel but no text.
  </Accordion>

  <Accordion title="Entries do not say who did it">
    Bloom takes the responsible person from Discord's audit log. Grant it **View Audit Log**. Some events, such as thread creation, are attributed by Discord differently and may show only a user ID.
  </Accordion>

  <Accordion title="Every join is logged twice">
    Both `joinlogs` and the Join category are set. Keep the one you prefer and disable the other with `!joinlogs off` or `!logs join none`.
  </Accordion>

  <Accordion title="A busy channel is flooding the message log">
    Run `!logignore add #channel`. Edits and deletions in that channel stop being logged, and every other category keeps working.
  </Accordion>
</AccordionGroup>

## Related pages

<CardGroup cols={2}>
  <Card title="Invite and first setup" icon="rocket" href="/getting-started/first-setup">
    Where logging fits into setting up a new server.
  </Card>

  <Card title="Permissions and hierarchy" icon="user-lock" href="/getting-started/permissions">
    Fixing the permission errors that stop Bloom writing to a channel.
  </Card>

  <Card title="Welcome messages" icon="door-open" href="/configuration/welcome">
    The public greeting for new members, separate from join logs.
  </Card>

  <Card title="Dashboard access" icon="sliders" href="/getting-started/dashboard">
    Signing in and controlling who can open the Logging module.
  </Card>
</CardGroup>
