From f5281471f1e40ad4216655497b731110955f9954 Mon Sep 17 00:00:00 2001 From: Strokkur24 Date: Mon, 28 Sep 2026 23:54:01 +0200 Subject: [PATCH] Document how to do proper logging in plugins --- astro.config.ts | 2 + .../assets/logging-component-standard.png | Bin 0 -> 14694 bytes .../dev/misc/assets/logging-component.png | Bin 0 -> 21620 bytes src/content/docs/paper/dev/misc/logging.md | 124 ++++++++++++++++++ 4 files changed, 126 insertions(+) create mode 100644 src/content/docs/paper/dev/misc/assets/logging-component-standard.png create mode 100644 src/content/docs/paper/dev/misc/assets/logging-component.png create mode 100644 src/content/docs/paper/dev/misc/logging.md diff --git a/astro.config.ts b/astro.config.ts index 1716db587..c1c2006fb 100644 --- a/astro.config.ts +++ b/astro.config.ts @@ -278,6 +278,7 @@ export default defineConfig({ items: [ "paper/dev/using-databases", "paper/dev/debugging", + "paper/dev/logging", "paper/dev/internals", "paper/dev/reading-stacktraces", ], @@ -572,6 +573,7 @@ export default defineConfig({ velocity: "https://jd.papermc.io/velocity", adventure: { url: "https://jd.papermc.io/adventure", module: "net.kyori.adventure.api" }, java: { url: "https://docs.oracle.com/en/java/javase/25/docs/api", module: "java.base" }, + slf4j: "https://www.slf4j.org/apidocs", }, }, ], diff --git a/src/content/docs/paper/dev/misc/assets/logging-component-standard.png b/src/content/docs/paper/dev/misc/assets/logging-component-standard.png new file mode 100644 index 0000000000000000000000000000000000000000..b48ed3aa519658a56995238539b12c5133301378 GIT binary patch literal 14694 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

>6q{$hzNI%IZR6Nr_v5ibq9uw?}I{OF`ao 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 literal 0 HcmV?d00001 diff --git a/src/content/docs/paper/dev/misc/assets/logging-component.png b/src/content/docs/paper/dev/misc/assets/logging-component.png new file mode 100644 index 0000000000000000000000000000000000000000..c3da9ba813b37c8bd984775dd3694dd3b6f1190f GIT binary patch literal 21620 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 literal 0 HcmV?d00001 diff --git a/src/content/docs/paper/dev/misc/logging.md b/src/content/docs/paper/dev/misc/logging.md new file mode 100644 index 000000000..be2f05764 --- /dev/null +++ b/src/content/docs/paper/dev/misc/logging.md @@ -0,0 +1,124 @@ +--- +title: Plugin Logging +description: A guide to to everything logging related for plugin dev. +slug: paper/dev/logging +--- + +Adding proper logging to your plugin can help both yourself and users of your plugin to find bugs and issues quickly. +This page serves as a general overview on the different types of loggers you can use in your plugin, when to use +each type, and other tips and tricks! + +## Different types of loggers + +Paper plugins (through their main class, the class extending [`JavaPlugin`](jd:paper:org.bukkit.plugin.java.JavaPlugin)) +have direct access to three different types of logger classes. + +### The java.util logger + +The [`java.util.logging.Logger`](jd:java:java.util.Logger) (accessible via +[`JavaPlugin#getLogger()`](jd:paper:org.bukkit.plugin.java.JavaPlugin#getLogger())), +commonly referred to as the **java.util logger**, is a simple Java built-in logger class. It allows for standard +level-based logging, as well as a way to log exception stacktraces directly. + +Example usage: +```java +@Override +public void onEnable() { + int id = loadDatabaseId(); + try { + getLogger().info("Starting database load for id = %d".formatted(id)); + initDatabase(id); + } catch (SQLException e) { + getLogger().log(Level.SEVERE, "Failed to init database", e); + } +} +``` + +### The SLF4J logger + +[SLF4J](https://slf4j.org/) is a "Simple Logging Facade for Java" that serves as an abstraction for multiple logging +frameworks to implement. You can obtain a SLF4J [`Logger`](jd:slf4j:org.slf4j.Logger) instance via the +[`JavaPlugin#getSLF4JLogger()`](jd:paper:org.bukkit.plugin.java.JavaPlugin#getSLF4JLogger()) method. + +SLF4J also allows for level-based logging, however it provides a nicer interface for parameterized logging +(log messages with parameters) and better usability when printing exception stacktraces. It additionally supports +markers, which can be very useful for advanced logging setups. + +Example usage: +```java +@Override +public void onEnable() { + int id = loadDatabaseId(); + try { + getSLF4JLogger().info("Starting database load for id = {}", id); + initDatabase(id); + } catch (SQLException e) { + getSLF4JLogger().error("Failed to init database", e); + } +} +``` + +The SLF4J logger is generally shorter and easier to use than the java.util logger. + +### The component logger + +Adventure's [`ComponentLogger`](jd:adventure:net.kyori.adventure.text.logger.slf4j:net.kyori.adventure.text.logger.slf4j.ComponentLogger) +is an extension of the SLF4J logger (meaning it inherits all of its features) which additionally provides support +for printing [`Component`](jd:adventure:net.kyori.adventure.text.Component)s directly. This includes support for colored +log output in supported environments. An instance of it can be retrieved via the +[`JavaPlugin#getComponentLogger()`](jd:paper:org.bukkit.plugin.java.JavaPlugin#getComponentLogger()) +method. + +Example usage: +```java +@Override +public void onEnable() { + int id = loadDatabaseId(); + try { + getComponentLogger().info( + MiniMessage.miniMessage().deserialize("Starting database load for id = {}"), + id + ); + initDatabase(id); + } catch (SQLException e) { + getComponentLogger().error("Failed to init database", e); + } +} +``` + +The component logger is the only way you can properly out components to console. The following code fragment +would yield the below console output: + +```java +Component output = constructComponent(); +getComponentLogger().warn("Component: {}", output); +``` + +![](./assets/logging-component.png) + +Whereas the java.util or regular SLF4J logger would simply call `#toString()` on the component, +resulting in basically unusable output: + +![](./assets/logging-component-standard.png) + +### Other + +:::danger[System.out.println()] + +Paper **strongly** advises against using `System.out.println()` calls in your code. This includes calls such as +`Exception#printStackTrace()`. You should always prefer to use a proper logger for more fine-grained control over +your logging level and output. + +::: + +:::caution[JavaPlugin#getLog4JLogger()] + +This method has been deprecated. You should prefer to use the [SLF4J logger](#the-slf4j-logger) instead. + +::: + +## Which logger should you use? + +Nowadays, the overall recommendation is to use the [SLF4J logger](#the-slf4j-logger), as it is the simplest, most +feature-complete logger. The [component logger](#the-component-logger) should be used if you frequently interact +with and may need to log Adventure components.