java - 如何配置 slf4j(用于 JDA)与 log4j(用于 Minecraft Paper)一起使用?

标签 java logging minecraft discord-jda

我正在为 Minecraft 制作插件 - ' Paper ' 确切地。它使用 JDA用于 Discord 机器人功能。

问题是,Minecraft(Paper) 使用 log4j 作为其日志库。 JDA 使用 slf4j 作为其日志记录库。我希望 JDA 使用 log4j,以便 JDA 的错误消息将作为插件的错误消息显示在控制台中。 (有关实际日志,请参阅 EDIT2)

没有 System.out.println() 因为 Minecraft(Paper) 会提示使用它。
没有 Logback,因为我认为它是另一个日志库,因此它不能与 Minecraft(Paper) 的日志系统很好地配合(Minecraft 日志等中没有 JDA 日志)。当 Minecraft 已经提供了日志系统 log4j 时,我不想再实现另一个日志库。

JDA wiki 只描述了 Logback,所以我必须找到自己的方法来使用 Minecraft 的日志系统制作 JDA,但没有成功。

例如:

// 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!

这些所有消息都应该是 Minecraft(Paper) 日志系统的一部分,而不是模仿它。这意味着,它应该在代码的某处使用 JavaPlugin#getLogger().info() 或类似的内容。

如何让JDA变成这样?
仅实现 log4j-slf4j18-impl 是行不通的。我想我应该对 JDA 的日志记录做一些事情。


编辑:这是当前的build.gradle文件内容。 LINK

目前,我的插件为 JDA 实现了 log4j-slf4j-impl

最佳答案

Log4j 2 SLF4J Binding为此目的而存在。 它是一个 SLF4J 记录器实现(如 slf4j-simple),将所有内容记录到 log4j。换句话说,使用 SLF4J 记录的所有内容都将转发到 log4j。

要使用它,只需将以下内容添加到您的 pom.xml 中(请参阅 this ):

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-slf4j18-impl</artifactId>
  <version>2.17.2</version>
</dependency>

如果你使用 Gradle,它会看起来像这样:

compile 'org.apache.logging.log4j:log4j-slf4j18-impl:2.17.2'

添加此依赖项会包含并自动注册记录器。

关于java - 如何配置 slf4j(用于 JDA)与 log4j(用于 Minecraft Paper)一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71280094/

相关文章:

java - 这是合适的定制同步器吗?

java - OpenCV HoughLine 只检测图像中的一条线

java - 禁止 Javadoc 中 <pre> 标签内的换行符

java - ViewPager 在返回时跳过 View ,留空

debugging - 在自定义 Ansible 模块中是否有调试日志记录的标准/首选方法。

java - 如何通过类路径用另一个 jar 修补一个 jar(替换类文件)

python - 如何在单元测试中验证python日志格式?

logging - Glassfish v3 日志记录

java - For 循环检查玩家位置

java - 为什么箭头会击中玩家?我的世界模组 1.8