Java 如何在jetty中启用登录?
我试图调试我的案例,其中简单的ActiveWeb应用程序没有在Jetty下运行。它的行为就像不存在任何用于请求处理的类一样,并返回错误404 问题不在于ActiveWeb。是关于码头的。如何发现Jetty有一些web应用程序,它有一个带注释的类,并将在HTTP请求上执行它 目前我已经下载了Jetty,它可以正常工作。不幸的是,它没有日志记录。当404错误返回时,Java 如何在jetty中启用登录?,java,jetty,embedded-jetty,Java,Jetty,Embedded Jetty,我试图调试我的案例,其中简单的ActiveWeb应用程序没有在Jetty下运行。它的行为就像不存在任何用于请求处理的类一样,并返回错误404 问题不在于ActiveWeb。是关于码头的。如何发现Jetty有一些web应用程序,它有一个带注释的类,并将在HTTP请求上执行它 目前我已经下载了Jetty,它可以正常工作。不幸的是,它没有日志记录。当404错误返回时,stdout或stderr中不显示任何内容,logs子目录中不显示任何文件 如何在jetty中启用登录 这里和这里的文件不清楚,也没有争
stdout
或stderr
中不显示任何内容,logs
子目录中不显示任何文件
如何在jetty中启用登录
这里和这里的文件不清楚,也没有争议
例如,第一页说Jetty不使用任何JavaLoggin框架,但也要求用户选择一个。第二页提供了一些配置示例,但没有说明该代码应放在何处。更新(2020年7月)Jetty 10及更新版本的答案
从Jetty 10.0.0开始,不再有“Jetty Logging”外观。码头工程 Jetty 9及更早版本的原始答案 文档是正确的,因为术语“Java日志框架”通常与现代日志框架相关联,如Java.util.Logging、slf4j、logback、log4j、commons日志、logkit等 这是正确的,Jetty不使用任何这些 Jetty日志记录早于标准化日志记录框架的所有这些工作。(Jetty,其测井层创建于1995年) 这就是Jetty logging(以及在文档站点)在设置和配置方面所做的工作 默认行为:
- 如果存在于类路径中,它将向slf4j发出日志事件,以使用处理程序进行处理
- 回退到,发送到System.err
- 指定要使用的日志记录实现。
选择包括:
#3种不同的选项
-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
jetty logging.properties
self discover/configuration#配置System.err输出
org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog
#将StdErrLog配置为在默认值为WARN或更高级别时记录所有jetty命名空间
org.eclipse.jetty.LEVEL=WARN
#将StdErrLog配置为在调试或更高级别记录特定于websocket的命名空间
org.eclipse.jetty.websocket.LEVEL=DEBUG
import org.eclipse.jetty.util.log.log;
导入org.eclipse.jetty.util.log.StdErrLog;
setLog(新的StdErrLog());
建议和注意事项:
Jetty服务器启动的输出将为您提供有关它正在使用的日志实现的提示
正常/默认行为:
请注意,这要么没有名称空间声明,要么在其输出中有高度缩写的名称空间。这说明stderlog
正在使用中
如果正在使用slf4j:
这是
slf4j
->logback
的默认输出。这里的整体结构与StdErrLog
产生的结构非常不同,因此我现在可以看出jetty是通过Slf4jLog
实现发射的。在我的例子中,我通过遵循文档页()中的建议并在start.ini文件中添加以下行来解决这个问题:
--模块=控制台捕获
我知道这只是解决你问题的一种方法,但对我来说效果很好。重新启动服务后,我可以在logs子目录中看到一个日志文件 很好的答案,但即使尝试了所有这些,我也无法看到调试日志消息。我也尝试使用logger.setDebugEnabled(true)设置debug,但是当我执行
logger.debug(“某些消息”,新异常”)
时,我没有得到任何输出。在使用info()或warn()时有效不过,日志级别的配置由您选择的记录器实现决定。对于stderlog,其属性位于jetty logging.properties
中。对于java.util.logging,其完全位于java.util.logging中。对于slf4j,其为您选择的slf4j实现(例如slf4j-log12意味着您的log4j.xml控制它)等等…为了使slf4j正常工作,请将适当的JAR添加到lib文件夹。我的jetty 9.3.8只有sfl4j api,Slf4jLog文档告诉我默认情况下使用的是NOPlogger。因此,如果我确定我的jetty使用的是Slfj4jLog,我可以如何轻松地修改日志级别?通过log4j.properties文件?@zygimantus请打开一个新问题,或查找现有问题(你的话题现在应该有很多答案了)。
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
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