首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jetty11将日志更改为SLF4J --如何访问它?

Jetty11将日志更改为SLF4J --如何访问它?
EN

Stack Overflow用户
提问于 2021-10-15 22:42:26
回答 1查看 1.2K关注 0票数 1

我们了解到Jetty 11基本上改变了版本10的日志记录(没有内部Jetty类,而且Jetty 11被推荐使用SLF4作为基本日志记录)。

问题

我们对Jetty 11有基本的知识(以前使用过它,我们甚至读过Jetty 11的"setLogging()“源代码),但是目前我们看不到任何方法来”教“Jetty 11一个新的日志记录(也就是Jetty 11源代码中没有像以前那样的”setLogging()“方法)。

唉,全球(Jetty)参数还不能成为我们的解决方案。

状态(也就是我们的需求)

  • 我们已经解决了Jetty的"RequestLog“输出,没有问题,我们需要”正常“的Jetty输出。
  • 我们需要通过统一的日志记录来控制(许多)模块/jars等。
  • 我们的日志记录很简单,但要求控制台上没有输出(stdout / stderr等)。在最好的情况下,日志记录也会得到一个异常/运行时的实例。
  • 因此,我们需要通过内部日志从"Jetty服务器“路由Jetty输出。使用SLF4?如果没有其他的方法(到目前为止我们也没有看到其他的方法),很高兴。
  • 遗憾的是,切换回10号码头并不是一种选择。

这一问题能否以我们尚未意识到的任何方式解决?任何想法都会非常感谢,谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-10-18 11:54:39

从Jetty到Slf4j的转换实际上是在Jetty10.0.0中完成的。

slf4j是为统一的日志记录而设计的,它可以将从使用.的库生成的所有日志事件捕获到单个日志位置实现中。

  • slf4j API
  • java.util.logging API
  • log4j1 API
  • log4j2 API
  • commons-logging API
  • logback API
  • org.apache.juli.logging API

如果您使用slf4j版本2.x系列,甚至对捕获java.lang.System.Logger API也有基本的支持。

使用slf4j,您需要考虑两类jar文件。

桥API罐

这些基于slf4j的JAR仅仅捕获上面的日志事件并将它们路由到slf4j。您可以选择这些罐子中的0.n来使用。

这里有很多种选择。以下是一些常见的

  • jcl-overs-slf4j -捕获雅加达共用日志事件并发送给slf4j
  • jul-to-slf4j -捕获Java日志事件并将它们发送给slf4j
  • log4j-over-slf4j -捕获Log4j 1.x事件并将其发送给slf4j
  • log4j2-overs-slf4j -捕获Log4j 2.x事件并将其发送给slf4j
  • osgi-over-slf4j -捕获osgi事件并将它们发送给slf4j

请参阅http://www.slf4j.org/legacy.html

实现绑定JAR

这些是slf4j-api的实现,是所有日志事件的最终绑定,它决定如何处理日志事件(例如:将其写入磁盘、忽略它、将其发送到日志数据库等)。

您在这里也有很多选择,这里有一些常见的罐子可供选择(只选一个!)

  • logback-classic - slf4j到Logback (Eclipse最喜欢的日志记录实现)
  • slf4j-jdk14 - slf4j到Java日志记录
  • slf4j-log4j12 - slf4j到Log4j 1.2.x
  • log4j-slf4j-impl - slf4j到Log4j 2.x (参见https://logging.apache.org/log4j/2.x/log4j-slf4j-impl/)
  • slfj-jcl - slf4j到雅加达共用日志记录
  • jetty-slf4j-impl - Jetty 10+实现slf4j api

请参阅:http://www.slf4j.org/manual.html#swapping

由于Jetty10.0.x,jetty-slf4j-impl存在,它提供了一个开箱即用的实现,它只需在通常的jetty-logging.properties中按级别写入System.err (又名STDERR)。

请参阅https://search.maven.org/artifact/org.eclipse.jetty/jetty-slf4j-impl

重要建议

  • 不要使用多个绑定实现。将其缩小到1绑定实现,并清除所有其他日志实现jars。
  • 不要偶然地使用相同的日志技术创建一个循环,引入一个Bridge API Jar和一个绑定实现JAR。(例如:同时使用绑定log4j-over-slf4jslf4j-log4j12 )
  • 没有“配置”来连接这些绑定或桥接jars,它们在类加载器中的存在就足以使它们工作。看看slf4j手册是如何工作的。

我们已经解决了Jetty的"RequestLog“输出,没有问题,我们需要”正常“的Jetty输出。

有趣的是,这是通过实际使用slf4j来“解决”的,因为这是Jetty 10和Jetty 11中唯一不受欢迎的RequestLog.Writer实现。

其工作方式是,Slf4jRequestLogWriter将使用slf4j-api将事件发送到单个命名的记录器(您可以在Slf4jRequestLogWriter.setLoggerName(String)中配置该记录器的名称)。然后到达日志实现,并根据日志记录程序的名称(文件、滚动、syslog、发送到另一个系统进行聚合、logstash等)路由到日志配置所决定的任何位置。

您是否真的实现了自己的RequestLog.Writer,而不是仅仅使用首选的日志记录库?(像logback、log4j2、log4j1甚至java.util.logging这样的库可以轻松地为RequestLog事件创建单独的日志文件)。

注意:此时不要将logback-access用于RequestLog (它还不完全支持jakarta.servlets,并且有许多错误导致错误的请求日志数据)。见https://github.com/qos-ch/logback/pull/532公开公关)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69591306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档