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 Feb 4, 2014Just trowing an idea here:
make it that you can enable ot disable a log for links and ip's. This way you don't have to go trough the while chatlog to catch them advertisers and ban them And then also when they try to bypass the links and urls. with spaces or (dot).
Thanks. Great plugin use it for 2 years now :D
-
View User Profile
-
Send Message
Posted Jan 20, 2014@newfization
It still works on 1.7.2
-
View User Profile
-
Send Message
Posted Jan 19, 2014Is there a dev build of this for 1.7.2 yet? Or does v3.3.3 work?
-
View User Profile
-
Send Message
Posted Nov 12, 2013What about non-latin letters support? It's abracadabra when I use cyrillic text....
Log: [127.0.0.1][11/13/2013 04:31:25 AM (Server_Name: -50,81,627)] Admin: logged in. [127.0.0.1][11/13/2013 04:32:58 AM (Server_Name: -50,81,627)] Admin: test test test [127.0.0.1][11/13/2013 04:33:17 AM (Server_Name: -50,81,627)] Admin: òåñò òåñò òåñò [127.0.0.1][11/13/2013 04:33:49 AM Server_Name: -50,81,627)] Admin: /ccl
I wrote in chat: 1. test test test 2. тест тест тест
-
View User Profile
-
Send Message
Posted Oct 10, 2013@Alrik94
Sorry Alrik, didn't see your message, the only extra plugin that uses chat right now is McMMO so I'd need /p as well as the standard chat types, /m /msg /tell /say /whisper /emsg etc. I'm going to be adding a chat plugin as I really need channels but I've been trying to hold off to make sure I pick one that would work with cclogger.
-
View User Profile
-
Send Message
Posted Oct 1, 2013@newfization
What plugins do you use to allow players to send messages?
-
View User Profile
-
Send Message
Posted Sep 18, 2013@newfization
I've been super busy lately, but I'm working on adding that feature really soon. Expect it in the next few days.
-
View User Profile
-
Send Message
Posted Sep 18, 2013I hate to be a pain, but if you could add the command based messages to chat soon, I for one would greatly appreciate it. I can't tell you how much it would help with the whole he said she said bullshit I have to deal with on a daily basis. Thanks for all the work you've already done, this is a favorite plugin of mine.
-
View User Profile
-
Send Message
Posted Sep 7, 2013@SirMangler
you can just turn on command logging, it will just log all commands, and not everything with /
-
View User Profile
-
Send Message
Posted Sep 7, 2013Is there a way to make it notify the exact words, i added some words (kanker), and he notifys (rakker) and words alike. can i turn this off?
-
View User Profile
-
Send Message
Posted Aug 24, 2013@Alrik94
Correct, I want to see every command a player types.
-
View User Profile
-
Send Message
Posted Aug 17, 2013ability to enable/disable the logging of OP's via the config?
-
View User Profile
-
Send Message
Posted Aug 13, 2013@SirMangler
What do you mean by multiworld support? The only thing this plugin does with any "world" info is log what world the player sent a chat/command in. It's all available to change around with the custom log format configuration option in the config.yml.
So you want all commands to send a notification to a player with that permission? What if I just made it so there's a permission where if you have it, all commands sent by players send you a notification?
-
View User Profile
-
Send Message
Posted Aug 13, 2013I have a suggestion, could you make it so we can do wild cards? say " * " means wildcards, you could do this:
commands: - /*
And whenever somebody types / it will report to the people who have the cclogger.notify permission
Also. Does this have multiworld support? silly question but I am making sure that is not a problem which is occurring right now.
-
View User Profile
-
Send Message
Posted Aug 8, 2013How would one make it so it logs every single command, or if something has the " / " character in something they say, it will log it
-
View User Profile
-
Send Message
Posted Jul 27, 2013@Kopertje
Could you give me the full log for that? Including the "caused by" stacktrace.
-
View User Profile
-
Send Message
Posted Jul 24, 2013@tobby88
Think you could provide me the chat message that was sent when that error was logged?
-
View User Profile
-
Send Message
Posted Jul 24, 2013Another error when logging chats:
Looks like this plugin is still very buggy ^^
-
View User Profile
-
Send Message
Posted Jul 24, 2013after a while of running this plugin I am getting this:
-
View User Profile
-
Send Message
Posted Jul 23, 2013After i installed the plugin, this is what i get when somone joins the server :
23.07 19:38:13 [Server] INFO at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
23.07 19:38:13 [Server] INFO at com.mysql.jdbc.Util.getInstance(Util.java:382)
23.07 19:38:13 [Server] INFO at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
23.07 19:38:13 [Server] INFO at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
23.07 19:38:13 [Server] INFO at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
23.07 19:38:13 [Server] INFO at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
23.07 19:38:13 [Server] INFO at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
23.07 19:38:13 [Server] INFO Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'playername' in 'field list'
23.07 19:38:13 [Server] INFO at net.minecraft.server.v1_6_R2.ThreadServerApplication.run(SourceFile:582)
23.07 19:38:13 [Server] INFO at net.minecraft.server.v1_6_R2.MinecraftServer.run(MinecraftServer.java:419)
23.07 19:38:13 [Server] INFO at net.minecraft.server.v1_6_R2.MinecraftServer.s(MinecraftServer.java:486)
23.07 19:38:13 [Server] INFO at net.minecraft.server.v1_6_R2.DedicatedServer.t(DedicatedServer.java:226)
23.07 19:38:13 [Server] INFO at net.minecraft.server.v1_6_R2.MinecraftServer.t(MinecraftServer.java:590)
23.07 19:38:13 [Server] INFO at net.minecraft.server.v1_6_R2.DedicatedServerConnection.b(SourceFile:29)
23.07 19:38:13 [Server] INFO at net.minecraft.server.v1_6_R2.DedicatedServerConnectionThread.a(DedicatedServerConnectionThread.java:41)
23.07 19:38:13 [Server] INFO at net.minecraft.server.v1_6_R2.PendingConnection.d(PendingConnection.java:43)
23.07 19:38:13 [Server] INFO at net.minecraft.server.v1_6_R2.PendingConnection.e(PendingConnection.java:130)
23.07 19:38:13 [Server] INFO at net.minecraft.server.v1_6_R2.PlayerList.a(PlayerList.java:102)
23.07 19:38:13 [Server] INFO at net.minecraft.server.v1_6_R2.PlayerList.c(PlayerList.java:206)
23.07 19:38:13 [Server] INFO at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462)
23.07 19:38:13 [Server] INFO at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
23.07 19:38:13 [Server] INFO at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
23.07 19:38:13 [Server] INFO at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
23.07 19:38:13 [Server] INFO org.bukkit.event.EventException
23.07 19:38:13 [Server] SEVERE Could not pass event PlayerJoinEvent to CCLogger v3.3.3