如何启用码头登录?

2022-09-02 23:42:02

我正在尝试调试我的案例,其中简单的ActiveWeb应用程序不在Jetty下运行。它的行为就像不存在任何用于请求处理的类一样,并返回错误 404。

问题不在于ActiveWeb。这是关于码头的。如何找出,有一些Web应用程序,Jetty喜欢注释类,并将在HTTP请求上执行它?

目前我已经下载了Jetty,它的工作原理。不幸的是,它不做日志记录。当 404 错误返回时,此时在子目录中不显示任何内容,也不显示任何文件。stdoutstderrlogs

如何启用码头登录?

这里的文档 http://www.eclipse.org/jetty/documentation/current/configuring-logging.html这里的 http://www.eclipse.org/jetty/documentation/current/configuring-jetty-request-logs.html 不清楚和有争议的。

例如,第一页说Jetty不使用任何Java loggin框架,但也需要一个框架来选择一个。第二页提供了一些配置示例,但没有说明此代码应放在哪里。


答案 1

更新(2020 年 7 月)Jetty 10 及更高版本的答案

从Jetty 10.0.0开始,不再有“Jetty Logging”的门面。
Jetty项目已转向仅使用SLF4J 2.0

9 号码头及更早版本的原始答案

文档是正确的,因为术语“Java Logging Framework”通常与现代日志记录框架相关联,如java.util.logging,slf4j,logback,log4j,commons-logging,logkit等。

这是正确的,Jetty不使用其中任何一个。

Jetty日志记录早于标准化日志记录框架的所有这些努力。(码头,其伐木层创建于1995年)

这就是 Jetty 日志记录在设置和配置方面所做的(并在文档站点上有记录)。

默认行为:

  • 如果类路径中存在 slf4j,它将向 slf4j 发出日志记录事件,以使用 Slf4jLog 处理程序进行处理。
  • 回退到 StdErrLog,发出到 System.err。

要配置:

这可以通过3种不同的方式实现

  1. 使用系统属性设置日志记录 impl
# 3 different options
-Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog
-Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog
-Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.JavaUtilLog
  1. 使用从类路径中找到的自我发现/配置。jetty-logging.properties

来自码头项目本身的例子

# Configure for System.err output
org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog
# Configure StdErrLog to log all jetty namespace at default of WARN or above
org.eclipse.jetty.LEVEL=WARN
# Configure StdErrLog to log websocket specific namespace at DEBUG or above
org.eclipse.jetty.websocket.LEVEL=DEBUG
 
  1. 使用代码设置 Log.setLog(Logger)

这对于使用的人来说特别有用

import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.StdErrLog;

Log.setLog(new StdErrLog());

建议和注意事项:

Jetty 服务器启动的输出将为您提供有关它正在使用的日志记录实现的提示。

正常/默认行为:

2014-09-11 10:48:38.726:INFO::main: Logging initialized @378ms
2014-09-11 10:48:39.067:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/Users/joakim/Code/Jetty/distros/jetty-distribution-9.2.1.v20140609/demo-base/webapps/] at interval 1

请注意,这要么没有命名空间声明,要么在其输出中具有大量缩写的命名空间。这告诉我,正在使用中。StdErrLog

如果 slf4j 正在使用中:

10:50:18.871 [main] INFO  org.eclipse.jetty.util.log - Logging initialized @352ms
10:50:19.102 [main] INFO  o.e.j.d.p.ScanningAppProvider - Deployment monitor [file:/Users/joakim/Code/Jetty/distros/jetty-distribution-9.2.1.v20140609/demo-base/webapps/] at interval 1

这是 -> 的默认控制台追加器输出。这里的整体结构与所产生的结构非常不同,所以我现在可以通过实现来判断码头正在发射。slf4jlogbackStdErrLogSlf4jLog


答案 2

在我的情况下,我已经按照文档页面中的建议(Jetty的StdErrLog的默认日志记录)并在开头.ini文件中添加了以下行来解决它:--module=console-capture

我知道这只是解决你的问题的一种方法,但它对我来说效果很好。重新启动服务后,我已经可以在 logs 子目录中看到日志文件。


推荐