Logging
Per-subsystem normal/debug switches, categories and logs/debug.log.
Examples#
Turn on a detailed trace for teleportation only#
A warp is broken, but you do not want to flood latest.log with the whole mod.
/neoe reload
In config.json (or main.json in split mode) set logging.categories.teleportation.debug to true, then reload. The category's routine output still goes to the console/latest.log with normal: true; debug goes only to logs/debug.log. Warnings and errors are never silenced by either key.
Remove the "Player issued command" line from the console#
On a busy server the commands.normal category prints every player command.
/neoe reload
logging.categories.commands.normal: false stops writing these lines after a reload. The commands themselves work as before. Command registration errors are still visible.
Edge cases#
There is no separate mod log file#
Debug goes to the platform's standard logs/debug.log (Log4j2), not to logs/neoessentials/. The auctionHouse category in the config is camelCase; the enum in code may look different, but the JSON key is exactly auctionHouse.
What to do: Look for the trace in logs/debug.log. Do not create an empty logs/neoessentials/debug.log by hand — the mod does not write debug there (that folder gets, for example, the economy's transactions.log).
12 categories, not a single switch#
Keys: chat, economy, permissions, teleportation, moderation, auctionHouse, kits, webDashboard, discord, config, commands, general. general covers everything without its own category (storage, holograms, shop, localization, vault).
What to do: If "nothing is logged" after enabling debug, you enabled the wrong category. For a warp that is teleportation, for /pay it is economy.
Detailed guide#
The section below is the project's original documentation (docs/Wiki/Logging.md). Links to other wiki pages are rewritten to this site; the guides themselves are not edited, so upstream syncs stay conflict-free.
Version: 1.0.5+build.54 · Config: config.json → logging section
Overview#
NeoEssentials logs through a per-subsystem system instead of one all-or-nothing debug switch.
Every log call in the mod is routed through one of 12 categories, and each category has two
independent toggles:
"logging": {
"categories": {
"chat": { "normal": true, "debug": false },
"economy": { "normal": true, "debug": false },
"permissions": { "normal": true, "debug": false },
"teleportation": { "normal": true, "debug": false },
"moderation": { "normal": true, "debug": false },
"auctionHouse": { "normal": true, "debug": false },
"kits": { "normal": true, "debug": false },
"webDashboard": { "normal": true, "debug": false },
"discord": { "normal": true, "debug": false },
"config": { "normal": true, "debug": false },
"commands": { "normal": true, "debug": false },
"general": { "normal": true, "debug": false }
}
}
| Toggle |
Default |
Where it shows up |
What it covers |
normal |
true |
Console + logs/latest.log |
Routine, non-error messages for that category (e.g. "migrated N transaction records") |
debug |
false |
logs/debug.log only |
Verbose tracing — request/decision/outcome for that category's key operations |
Warnings and errors are never gated by either toggle. Turning a category off can only
silence its routine chatter or opt-in verbose tracing — a real problem in that subsystem will
always be logged, so you can't accidentally hide an actual bug by disabling a category.
debug messages don't need any extra setup to reach logs/debug.log — the platform's default
Log4j2 configuration already routes DEBUG-level output there, separately from the INFO+ level
that reaches the console and logs/latest.log. There's no NeoEssentials-specific log file.
Categories#
| Category |
Config key |
Covers |
| Chat |
chat |
Chat formatting, channels, anti-spam, badges/status icons, mute/msg-toggle/ignore state, AFK |
| Economy |
economy |
Balances, pay, transactions, worth/sell, economy modifiers |
| Permissions |
permissions |
Internal permission system, LuckPerms/FTB Ranks/Bukkit-Sponge adapters, permission resolution |
| Teleportation |
teleportation |
Homes, warps, spawn, /tpa, /back, random teleport, direct/admin teleports |
| Moderation |
moderation |
Bans, kicks, jails, warns, freezes, vanish |
| Auction House |
auctionHouse |
Listing create/bid/buy/cancel/expire lifecycle |
| Kits |
kits |
Kit claim eligibility checks and grants |
| Web Dashboard |
webDashboard |
HTTP request handling, authentication, analytics, backups, cloud storage, the map/websocket features |
| Discord |
discord |
Chat bridge adapters (SDLink, Mc2Discord, DCIntegration) |
| Config |
config |
Config file load/migration/version-check/split-config decisions |
| Commands |
commands |
Command registration/dispatch tracing, and (as of build.61) a "PlayerName issued command: /..." console line for every player command — set commands.normal: false to turn that line off |
| General |
general |
Everything else: database/storage, scheduler, security, items, inventory, holograms, tags, teams, resource packs, shop, vault, localization |
Example: Debugging a Broken Warp#
Flip on verbose tracing for just teleportation, without touching anything else:
"teleportation": { "normal": true, "debug": true }
/neoessentials reload, reproduce the issue, then check logs/debug.log for a trace of the
warp request — target resolution, permission/cooldown checks, and the actual teleport
execution. Turn it back off once you're done; leaving debug on for a busy category can add a
meaningful amount of log volume over time.
Migrating from the Old Global Toggle#
Older configs used a single logging.enableDebugLogging boolean. On first boot after
updating, this is migrated automatically:
- If
enableDebugLogging was true, every category's debug flag is seeded to true, so you
don't silently lose verbose output you were relying on — you can then dial individual
categories back down.
- If it was
false or unset, categories are simply populated with their defaults above.
- The old key is left on disk (unused, harmless) rather than removed.
This migration is one-time — once logging.categories exists in your config, it's yours to
edit freely.