The problem is, Minecraft(Paper) uses log4j as its logging library. JDA uses slf4j as its logging library. I want JDA to use log4j so that error message of JDA would be shown in console as plugin’s error message. (See EDIT2 for actual logs)
System.out.println() because Minecraft(Paper) will complain about using it.
No Logback because I think it is another logging library, thus it cannot work well with Minecraft(Paper)’s logging system (no JDA logs in Minecraft log etc.). I don’t want to implement another logging library when there is already logging system provided by Minecraft, which is log4j.
JDA wiki only describes about Logback so I have to find my own way for making JDA with Minecraft’s logging system, but it was no success.
// Something went wrong in JDA and shows stacktrace [05:20:26] [Server thread/ERROR]: [MyPlugin] [JDA] 'JDA Error Message' (prints stacktrace of the error) // Show debug message of WebSocketClient (Since it is debug message, this can be turned off) [05:20:26] [Server thread/DEBUG]: [MyPlugin] [JDA] WebSocketClient - Connected to WebSocket // Show JDA message when JDA bot is loaded [05:20:26] [Server thread/DEBUG]: [MyPlugin] [JDA] JDA - Finished Loading!
These all messages should be part of the Minecraft(Paper)’s logging system, not mimicing it. This means, it should use
JavaPlugin#getLogger().info() or something like this in somewhere of the code.
How to make JDA to be like this?
log4j-slf4j18-impl doesn’t work. I think I should do something about JDA’s logging stuff.
EDIT: Here is current
build.gradle file content. LINK
Currently, my plugin implements
log4j-slf4j-impl for JDA.
You need to add a “bridge” from
The appropriate dependency needs to fit both the
slf4j version and the
To find the correct version I checked the build.gradle.kts of JDA
JDA uses the
1.7.25 version of slf4j and your module uses the
2.17.2 version of the
So you need to add
log4j-slf4j18-impl is for sl4j from 18 and newer version.
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.17.2</version> </dependency>
Also, making the assumption that your build depends on the JDA, it might be helpful to completely omit importing the SL4J since depending on JDA will make the SL4J available to your plugin. JDA dependency on SLF4J is declared as an API and therefore is available.
This was also derived from the build.gradle.kts of JDA
So most likely you can safely remove
org.slf4j:slf4j-api:1.8.0-beta4 from your dependencies.
Update: for the gradle.build file.
- Shadowjar-ing/shading sl4j and log4j might interfere with the initialization process. I could find an occurrence to support this. You could remove all related relocations and try again.
compileOnly('org.slf4j:slf4j-api:1.7.25')to match the version that JDA declares. Most probably this has nothing to do with the error faced.