CCLogger
What is CCLogger?
CCLogger logs player activity on Paper servers. Chat messages, commands, joins, quits, kicks - it all gets recorded to your storage backend of choice.
You can use flat files for simplicity, SQLite if you want queries without external dependencies, or connect to MySQL, MongoDB, or Redis for larger setups. All writes happen async so your server tick rate stays clean.
Features
Logging
Chat - Messages with timestamp, world, and coordinates
Commands - All commands (blacklist supported for /login, /register, etc.)
Connections - Join, quit, kick events
Output options:
- Global log files (chat.log, commands.log)
- Per-player files (players/Steve.log)
- Custom format with placeholders:
%date,%name,%content,%world,%x,%y,%z
Storage
File - Text files, human-readable (no setup)
SQLite - Local database, no config needed (no setup)
MySQL - Shared database for networks (requires MySQL server)
MongoDB - Document store, scales horizontally (requires MongoDB)
Redis - Fast, in-memory, good for high volume (requires Redis)
All backends use async writes and connection pooling.
Privacy
IP logging modes for GDPR compliance:
- disabled - IPs not stored
- truncated - Last octet zeroed (192.168.1.x becomes 192.168.1.0)
- hashed - bcrypt hash with daily rotating salt
- full - Complete IP stored
Commands can be blacklisted with regex patterns. Players with cclogger.exempt permission are excluded from logging.
Alerts
Monitor keywords and commands in real-time:
- Define trigger words (e.g., "hack", "cheat", "exploit")
- Define trigger commands (e.g., "/op", "/gamemode")
- Ops with
cclogger.notifyget in-game alerts - All triggers logged to file
Web Dashboard
CCLogger includes a modern React-based web dashboard (disabled by default):
Dashboard
- Stats overview with log type breakdown
- Log distribution pie chart
- Activity timeline showing recent activity
- Top active players at a glance
Live Timeline
- Real-time activity feed that auto-refreshes
- Pause/resume with keyboard shortcuts
- Filter by log type (Chat, Command, Login, Logout)
- Jump to live button when scrolled
Log Browser
- Full-text search across all logs
- Filter by type, player, date range
- Pagination for large result sets
- Export to JSON or CSV
Player Profiles
- Minecraft avatar display (via Crafatar)
- Activity statistics per player
- Recent activity history
- Click any player name to view profile
REST API
POST /api/auth/token- Get JWT tokenGET /api/logs- Query logs with filtersGET /api/logs/player/{name}- Logs for one playerGET /api/logs/search?q=term- Search log contentGET /api/stats- Statistics
JWT auth with rate limiting.
Requirements
- Paper 1.21+ or Folia
- Java 21+
Commands
/cclogger- Shows help/cclogger reload- Reload config (requirescclogger.reload)/cclogger count <word> [player]- Count word occurrences (requirescclogger.statistics)/cclogger clear- Archive and clear logs (requirescclogger.admin)
Permissions
cclogger.*- Everything (default: OP)cclogger.notify- Receive alerts (default: OP)cclogger.exempt- Not logged (default: false)cclogger.reload- Reload config (default: OP)cclogger.statistics- Count command (default: OP)cclogger.admin- Clear/archive (default: OP)cclogger.web- Web API access (default: OP)
Setup
- Drop JAR in
plugins/ - Restart server
- Edit
plugins/CCLogger/config.yml /cclogger reload
Default config works immediately. Change storage.type if you want something other than SQLite.
Config Example
storage:
type: sqlite # file, sqlite, mysql, mongodb, redis
privacy:
ip-logging: disabled
notifications:
enabled: true
chat-keywords:
- "hack"
- "cheat"
web:
enabled: false
port: 8080
-
View User Profile
-
Send Message
Posted May 3, 2012@TrinaryAtom
I've got the notification system pretty much done. Is there anything specific with that system that you'd like to see in the next release?
-
View User Profile
-
Send Message
Posted May 2, 2012@Alrik94
Actually i have become fond of the default setup. So nevermind of the white-list setting. It seems to make more sense this way.
Also, wondering how your progress is coming along? To be more specific, the notifying a players with the permission. And, I've already switched to this plugin. From the last one i was using. It just runs way better.
-
View User Profile
-
Send Message
Posted Apr 29, 2012Nice plugin here.
-
View User Profile
-
Send Message
Posted Apr 22, 2012@TrinaryAtom
I guess I overlooked that option in the config. I intended for it to be done by the last release, but I never got it finished and forgot to remove it from the config source. It should be done by the next release with a notification system, command whitelist, and a permissions system for the notifications.
-
View User Profile
-
Send Message
Posted Apr 22, 2012I have found a problem. I am trying to set this to only detect the list of commands i set, but, the "commandswihtelist=false" wont change to true. It keeps changeing back when i start up the server.
-
View User Profile
-
Send Message
Posted Apr 21, 2012I agree with two posts down, I'm looking for a specific command logger and notify in chat log.
If this plugin had that functionality.. it would effectively replace another one i use.
-
View User Profile
-
Send Message
Posted Apr 17, 2012@JohOply
Yeah that's a good idea ;)
-
View User Profile
-
Send Message
Posted Apr 17, 2012Hello,
Sometimes, I have this error
Edit: I'm going to test the last version
-
View User Profile
-
Send Message
Posted Apr 13, 2012Could you add a feature to show when players use commands in game to the admins?
'player' uses command /spawn Admin sees in chat... 'player' used command /spawn
-
View User Profile
-
Send Message
Posted Apr 12, 2012@disciple218
Thank you, that helped out a lot lol
-
View User Profile
-
Send Message
Posted Apr 12, 2012@TreasureHaven
I use NotePad++ for all my server file viewing/editing. Highly recommend.
-
View User Profile
-
Send Message
Posted Apr 12, 2012Is there an easier way to read the logs besides in a notepad, because everything is kinda jumbled together and it could get confusing.
-
View User Profile
-
Send Message
Posted Apr 9, 2012@slixxkilla
Yes, it should.
-
View User Profile
-
Send Message
Posted Apr 9, 2012@Alrik94
So that update will take care of this issue?
4/9/2012 2:09:58 PM [SEVERE] Could not pass event PlayerChatEvent to CCLogger
4/9/2012 2:09:58 PM org.bukkit.event.EventException
4/9/2012 2:09:58 PM at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:303)
4/9/2012 2:09:58 PM at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
4/9/2012 2:09:58 PM at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:459)
4/9/2012 2:09:58 PM at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:786)
4/9/2012 2:09:58 PM at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:764)
4/9/2012 2:09:58 PM at net.minecraft.server.Packet3Chat.handle(Packet3Chat.java:34)
4/9/2012 2:09:58 PM at net.minecraft.server.NetworkManager.b(NetworkManager.java:229)
4/9/2012 2:09:58 PM at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:113)
4/9/2012 2:09:58 PM at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:78)
4/9/2012 2:09:58 PM at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:551)
4/9/2012 2:09:58 PM at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:449)
4/9/2012 2:09:58 PM at net.minecraft.server.ThreadServerApplication.run(SourceFile:492)
4/9/2012 2:09:58 PM Caused by: java.lang.IndexOutOfBoundsException: No group 4
4/9/2012 2:09:58 PM at java.util.regex.Matcher.start(Unknown Source)
4/9/2012 2:09:58 PM at java.util.regex.Matcher.appendReplacement(Unknown Source)
4/9/2012 2:09:58 PM at java.util.regex.Matcher.replaceAll(Unknown Source)
4/9/2012 2:09:58 PM at java.lang.String.replaceAll(Unknown Source)
4/9/2012 2:09:58 PM at me.alrik94.plugins.cclogger.ChatLogger.formatLog(ChatLogger.java:106)
4/9/2012 2:09:58 PM at me.alrik94.plugins.cclogger.ChatLogger.processInformation(ChatLogger.java:66)
4/9/2012 2:09:58 PM at me.alrik94.plugins.cclogger.ChatLogger.onPlayerChat(ChatLogger.java:52)
4/9/2012 2:09:58 PM at sun.reflect.GeneratedMethodAccessor167.invoke(Unknown Source)
4/9/2012 2:09:58 PM at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
4/9/2012 2:09:58 PM at java.lang.reflect.Method.invoke(Unknown Source)
4/9/2012 2:09:58 PM at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:301)
4/9/2012 2:09:58 PM ... 11 more
-
View User Profile
-
Send Message
Posted Apr 7, 2012@disciple218
Fixed the bug. A new release should be approved soon.
-
View User Profile
-
Send Message
Posted Apr 7, 2012@KAGamerAlex
Yep, v2.0.1.
@Alrik94
Unfortunately at this time, I cannot confirm. I will try to confirm this the next time it happens.
EDIT: Confirmed, and repeatable. Although, I'm not sure that's the only thing triggering it.
-
View User Profile
-
Send Message
Posted Apr 6, 2012@disciple218
I have seen this. I think I know what might be causing it. Can you confirm for me that the next thing that a player types includes a "\" (backslash)?
-
View User Profile
-
Send Message
Posted Apr 6, 2012@disciple218
Sure you're using the latest version?
-
View User Profile
-
Send Message
Posted Apr 5, 2012Getting a lot of "couldn't pass event to CCLogger" errors.
http://pastie.org/3732025
-
View User Profile
-
Send Message
Posted Apr 1, 2012Could you perhaps add logging a player's ip address?
Wonderful plugin btw, thanks! :-)
Best regards,
- ThisUsernameIsMine