jetty 和 slf4j 依赖

jetty and slf4j dependencies

我使用 Jetty 已经很长时间了。这是我第一次遇到这个错误,我收到了很多这样的错误,导致服务器响应不佳。 我只使用 Jetty 9.3.9 来处理 websockets 连接。

Exception in thread "qtp147268537-19366" java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
    at org.eclipse.jetty.util.log.JettyAwareLogger.log(JettyAwareLogger.java:607)
    at org.eclipse.jetty.util.log.JettyAwareLogger.warn(JettyAwareLogger.java:431)
    at org.eclipse.jetty.util.log.Slf4jLog.warn(Slf4jLog.java:69)
    at org.eclipse.jetty.util.log.Slf4jLog.warn(Slf4jLog.java:64)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.run(QueuedThreadPool.java:646)
    at java.lang.Thread.run(Thread.java:745)

在 1 小时内出现了太多错误,导致服务器不接受任何新连接,但当前建立的连接运行良好。

深入研究问题后,我认为这与此有关

 _logger.log(marker, FQCN, level, msg, null, t);

我正在使用 slf4j-api-1.5.3.jar 和 slf4j-log4j12-1.5.3.jar。我是否需要将 slf4j 升级到更新的版本,因为它可能会破坏我程序中的其他一些东西?如果是,最低要求的版本是什么?或者问题出在其他地方?

是的,您需要升级您的 slf4j 版本。

建议至少使用1.6.6版本的slf4j。 (随意使用更新的版本,例如 1.7.12 版)

添加了 org.slf4j.api.LocationAware class 以支持多个 slf4j 桥:jcl-over-slf4j、jul-to-slf4j 和 log4j-over-slf4j,以及包装记录器。

Jetty 的 Slf4jLog 实现使用了包装记录器,因此它需要这个 class / 方法存在。