我正在开发一个“我的世界”插件,并想使用Javalin。我可以轻松地用JavalinLogger.enabled = false禁用Javali日志,但我不能禁用jetty日志。
在启动Javalin服务器时,我总是得到以下输出:
[22:24:32 INFO]: [org.eclipse.jetty.server.Server] jetty-11.0.12; built: 2022-09-14T02:38:00.723Z; git: d5b8c29485f5f56a14be5f20c2ccce81b93c5555; jvm 17+35-LTS-2724
[22:24:32 INFO]: [org.eclipse.jetty.server.session.DefaultSessionIdManager] Session workerName=node0
[22:24:32 INFO]: [org.eclipse.jetty.server.handler.ContextHandler] Started i.j.j.@3293e900{/,null,AVAILABLE}
[22:24:32 INFO]: [org.eclipse.jetty.server.AbstractConnector] Started ServerConnector@4c57aa18{HTTP/1.1, (http/1.1)}{0.0.0.0:80}
[22:24:32 INFO]: [org.eclipse.jetty.server.Server] Started Server@34f89e1c{STARTING}[11.0.12,sto=0] @4657581ms这些是我在pom.xml中的依赖项:
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.19.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.javalin</groupId>
<artifactId>javalin</artifactId>
<version>5.1.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.4.2</version>
</dependency>我已经尝试了以下几种方法:
设置不同系统属性的org.eclipse.jetty.LEVEL
相同的方法。
编辑1:仅仅实现了slf4j的源代码-简单,我意识到jetty根本没有使用它。没有创建SimpleLogger的实例。但是,如果我完全删除slf4j提供程序,jetty就不再进行日志记录了,但是Javalin发出了一个巨大的警告:没有找到提供程序
编辑2:重新创建问题的步骤
plugin
pom.xml,添加了以下依赖项:
<dependency>
<groupId>io.javalin</groupId>
<artifactId>javalin</artifactId>
<version>5.1.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.3</version>
</dependency>具有onEnable()方法的“主”java文件
@Override
public void onEnable() {
// Plugin startup logic
System.setProperty(org.slf4j.simple.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "OFF");
JavalinLogger.enabled = false;
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(this.getClassLoader());
Javalin app = Javalin.create();
Thread.currentThread().setContextClassLoader(classLoader);
app.get("/", ctx -> ctx.result("Hello World!"));
app.start();
}这将产生以下输出(在第1.19.2号文件上):
[02:39:47 INFO]: [Javalintest] Enabling Javalintest v1.0-SNAPSHOT
[02:39:48 INFO]: [org.eclipse.jetty.server.Server] jetty-11.0.12; built: 2022-09-14T02:38:00.723Z; git: d5b8c29485f5f56a14be5f20c2ccce81b93c5555; jvm 17+35-LTS-2724
[02:39:48 INFO]: [org.eclipse.jetty.server.session.DefaultSessionIdManager] Session workerName=node0
[02:39:48 INFO]: [org.eclipse.jetty.server.handler.ContextHandler] Started i.j.j.@2f6e3e6c{/,null,AVAILABLE}
[02:39:48 INFO]: [org.eclipse.jetty.server.AbstractConnector] Started ServerConnector@17e2d1ec{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
[02:39:48 INFO]: [org.eclipse.jetty.server.Server] Started Server@5f91e5cc{STARTING}[11.0.12,sto=0] @14943ms
[02:39:48 INFO]: Running delayed init tasks
[02:39:48 INFO]: Done (4.288s)! For help, type "help"
[02:39:48 INFO]: Timings Reset发布于 2022-10-30 12:08:40
Spigot / Bukkit使用java.util.logging作为它的环境(这很容易与您的独立环境所使用的环境不同)。
在Spigot / Bukkit中访问记录器的典型方法是..。
Logger logger = Bukkit.getLogger();
logger.info("This is my log message");当您在Spigot / Bukkit中运行时,只有一个Logger。
这个记录器是一个java.util.logging.Logger实例。
这意味着您必须拥有一个用于slf4j和Jetty日志记录的有效环境。
要做到这一点,请确保Spigot / Bukkit环境中存在slf4j-jdk14依赖项以及slf4j-api依赖项。小心这些可能是在您的Spigot / Bukkit环境中运行的不同插件的帮助下出现的,不要踩在它们上。
现在,一旦为依赖项设置了有效的设置,就需要配置日志记录所做的工作。
最简单的解决方案就是将org.eclipse.jetty树设置为更严格的级别。
// using java.util.logging
Logger logger = Logger.getLogger("org.eclipse.jetty");
logger.setLevel(Level.WARN); // good idea to see bad issues.请记住,您正在使用Spigot / Bukkit环境中的许多其他插件操作,在您之前,另一个插件可能已经初始化了javalin,从而使上面的代码行变得毫无用处(因为它发生得太晚了)。
https://stackoverflow.com/questions/74248672
复制相似问题